c# – .Net代码,用于捕获.asmx Web服务的HTTP 500错误响应
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – .Net代码,用于捕获.asmx Web服务的HTTP 500错误响应,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1715字,纯文字阅读大概需要3分钟。
内容图文
![c# – .Net代码,用于捕获.asmx Web服务的HTTP 500错误响应](/upload/InfoBanner/zyjiaocheng/827/d2b2877153f1490897fe74136e3b651c.jpg)
有没有办法从.Net客户端捕获.asmx Web服务返回的HTTP 500错误?
使用.Net 4.5(VS2015),.Net客户端代码使用.asmx Web服务并使用以下代码调用它:
var client = new WebserviceApi.MyServiceSoapClient();
var response = client.MyWebServiceMethod();
如果.asmx Web服务返回HTTP 500错误,其中包含错误消息详细信息的SOAP消息,则“response”变量将设置为null.
使用Fiddler,流量显示来自.asmx Web服务的HTTP 500响应.响应包含SOAP XML消息,其中包含有关错误的详细信息.
在.Net客户端代码中没有抛出或捕获异常,执行继续正常进行.
这意味着客户无需了解有关异常性质的信息.所有客户端代码都可以检查“response”是否为null,但是异常消息对客户端代码不可用.
如果.asmx Web服务返回HTTP 500响应,有没有办法强制.Net客户端代码抛出异常,以便可以检查/记录错误消息?
解决方法:
我对轴(java)Web服务有类似的问题.即使响应确实是HTTP 500,他们也会抛出那些没有出现在我身边的异常.
我不能肯定这会解决你的问题,但我解决了我的问题,重写了GetWebResponse方法并在需要时自行抛出异常.
我通过在添加Web引用后更改由Visual Studio生成的Web服务客户端代码来实现它(生成的文件名是:Reference.cs,有时它在解决方案中不可见,您必须单击解决方案窗格顶部的“显示所有文件”然后展开您的Web服务参考文件.
internal class ChangedWebServiceClient : SomeSoapService
{
protected override WebResponse GetWebResponse(WebRequest request)
{
var response = base.GetWebResponse(request);
if (response != null)
{
var responseField = response.GetType().GetField("_base", BindingFlags.Instance | BindingFlags.NonPublic);
if (responseField != null)
{
var webResp = responseField.GetValue(response) as HttpWebResponse;
if (webResp != null)
{
if (webResp.StatusCode.Equals(HttpStatusCode.InternalServerError))
throw new WebException(
"HTTP 500 - Internal Server Error happened here. Or any other message that fits here well :)");
}
}
}
return response;
}
}
内容总结
以上是互联网集市为您收集整理的c# – .Net代码,用于捕获.asmx Web服务的HTTP 500错误响应全部内容,希望文章能够帮你解决c# – .Net代码,用于捕获.asmx Web服务的HTTP 500错误响应所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。