作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
根据我的理解,以下内容应该从 WCF Rest 服务正确抛出自定义错误:
[DataContract(Namespace = "")]
public class ErrorHandler
{
[DataMember]
public int errorCode { get; set; }
[DataMember]
public string errorMessage { get; set; }
} // End of ErrorHandler
public class Implementation : ISomeInterface
{
public string SomeMethod()
{
throw new WebFaultException<ErrorHandler>(new ErrorHandler()
{
errorCode = 5,
errorMessage = "Something failed"
}, System.Net.HttpStatusCode.BadRequest);
}
}
HTTP/1.1 400 Bad Request
Cache-Control: private
Content-Length: 145
Content-Type: application/xml; charset=utf-8
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
Set-Cookie: ASP.NET_SessionId=gwsy212sbjfxdfzslgyrmli1; path=/; HttpOnly
X-Powered-By: ASP.NET
Date: Thu, 03 May 2012 17:49:14 GMT
<ErrorHandler xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><errorCode>5</errorCode><errorMessage>Something failed</errorMessage></ErrorHandler>
WebChannelFactory<ISomeInterface> client = new WebChannelFactory<ISomeInterface>(new Uri(targetHost));
ISomeInterface someInterface = client.CreateChannel();
try
{
var result = someInterface.SomeMethod();
}
catch(Exception ex)
{
// Try to examine the ErrorHandler to get additional details.
}
System.ServiceModel.ProtocolException
消息“远程服务器返回意外响应:(400) 错误请求。”。看来此时我还没有办法看到ErrorHandler的详细信息。有没有人遇到过这个?有没有办法在这一点上获得 ErrorHander 的详细信息?
最佳答案
WebChannelFactory
或 ChannelFactory
只会向您披露通用的 CommunicationException
.您将需要使用 IClientMessageInspector
行为或依赖 WebRequest
返回实际错误。
对于 IClientMessageInspector
方法 - 参见 this blog entry 中的评论.
对于 WebRequest
方法,你可以通过以下方式来捕捉WebException
.
try { }
catch (Exception ex)
{
if (ex.GetType().IsAssignableFrom(typeof(WebException)))
{
WebException webEx = ex as WebException;
if (webEx.Status == WebExceptionStatus.ProtocolError)
{
using (StreamReader exResponseReader = new StreamReader(webEx.Response.GetResponseStream()))
{
string exceptionMessage = exResponseReader.ReadToEnd();
Trace.TraceInformation("Internal Error: {0}", exceptionMessage);
}
}
}
}
关于WCF Rest 服务错误处理和 WebChannelFactory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10436951/
是否可以在 WebChannelFactory 上设置 header ?如果我使用的是 WebClient 对象,我可以这样做: WebClient client = new WebClient();
根据我的理解,以下内容应该从 WCF Rest 服务正确抛出自定义错误: [DataContract(Namespace = "")] public class ErrorHandler {
我是一名优秀的程序员,十分优秀!