gpt4 book ai didi

WCF 休息错误处理

转载 作者:行者123 更新时间:2023-12-03 07:41:15 25 4
gpt4 key购买 nike

我在使用 WCF 4.0 RESTful 服务时遇到了令人兴奋的问题。我正在尝试创建一个休息服务,如果出现错误,它将返回一个描述问题的 xml 文档
前任 :

    <ErrorHandler>
<cause>Resource not available</cause>
<errorCode>111103</errorCode>
</ErrorHandler>

为了做到这一点,我使用 Visual Studio 提供的模板创建了一个默认的 REST 服务
这是我的服务类:
public class Service1
{
// TODO: Implement the collection resource that will contain the SampleItem instances

[WebGet(UriTemplate = "")]
public List<SampleItem> GetCollection()
{
// TODO: Replace the current implementation to return a collection of SampleItem instances\
// throw new WebException("lala");
throw new WebFaultException<ErrorHandler>(new ErrorHandler { cause = "Resource not available", errorCode = 100 }, System.Net.HttpStatusCode.NotFound);
//return new List<SampleItem>() { new SampleItem() { Id = 1, StringValue = "Hello" } };
}

[WebInvoke(UriTemplate = "", Method = "POST")]
public SampleItem Create(SampleItem instance)
{
// TODO: Add the new instance of SampleItem to the collection
return new SampleItem() { Id = 3, StringValue = "59" };

}

[WebGet(UriTemplate = "{id}")]
public SampleItem Get(string id)
{
// TODO: Return the instance of SampleItem with the given id
throw new NotImplementedException();
}

[WebInvoke(UriTemplate = "{id}", Method = "PUT")]
public SampleItem Update(string id, SampleItem instance)
{
// TODO: Update the given instance of SampleItem in the collection
throw new NotImplementedException();
}

[WebInvoke(UriTemplate = "{id}", Method = "DELETE")]
public void Delete(string id)
{
// TODO: Remove the instance of SampleItem with the given id from the collection
throw new NotImplementedException();
}

}
}

从上面的代码可以看出,我在 GetCollection 方法中抛出了一个 WebFaultException。应该在响应正文中放入一个“ErrorHandler”对象。
这是我的 ErrorHandler 类的样子:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Runtime.Serialization;

namespace WcfRestService1
{
[DataContract]
public class ErrorHandler
{
[DataMember]
public int errorCode { get; set; }
[DataMember]
public string cause { get; set; }

}
}

疯狂的是,这东西可以工作,但不能正常工作:))。我想说的是,visual studio 给我一个错误,说 WebFaultException 没有被用户代码捕获:|它暂停了我的应用程序。如果我按继续,一切正常。
以下是一些描述我的问题的图片:

fiddle 手的第一步:
First Step

下一个 Visual Studio 的错误: Visual Studio Error

最后按继续后一切正常:

这对我来说毫无意义,我不知道为什么会发生这种事情以及如何解决它:P。我已经在网上搜索了几天,试图找到一个没有运气的解决方案。我正在使用 Visual Studio 2010 Ultimate

此致 :)

最佳答案

这里没有错。您正在调试,抛出异常,它中断,您继续并按应有的方式工作。

我怀疑您已将异常处理选项 (Ctrl+Alt+E) 设置为在引发异常时中断。 (选项中的“抛出”)无论何时抛出异常,无论它是否被处理,这都会导致中断。

WCF 操作中抛出的异常将由 WCF 运行时处理,如果它们是错误的,它们将被发送回去,以便 channel 不会出现错误。

现在关于发送回 XML,您可以使用 WebFaultException<string> 发送 XML 的字符串表示。 .

关于WCF 休息错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5626334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com