c# - .Net 代码捕获来自 .asmx 网络服务的 HTTP 500 错误响应

标签 c# .net web-services asmx

有没有办法从 .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 网络服务的 HTTP 500 响应。响应包含带有错误详细信息的 SOAP XML 消息。

.Net 客户端代码中没有抛出或捕获异常,继续正常执行。

这意味着客户端无法获取有关异常性质的信息。客户端代码所能做的就是检查“response”是否为空,但异常消息对客户端代码不可用。

如果 .asmx Web 服务返回 HTTP 500 响应,是否有任何方法可以强制 .Net 客户端代码抛出异常,以便检查/记录错误消息?

最佳答案

我对 axis (java) 网络服务有类似的问题。他们抛出了我这边没有出现的异常,即使响应实际上是 HTTP 500。

我不能肯定地说这会解决您的问题,但我通过覆盖 GetWebResponse 方法并在需要时自行抛出异常解决了我的问题。

我是通过更改添加Web Reference后Visual Studio生成的web服务客户端代码来实现的(生成的文件名为:Reference.cs,有时在解决方案中看不到,必须点击顶部的'Show All files'解决方案 Pane ,然后展开您的 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 网络服务的 HTTP 500 错误响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33389489/

相关文章:

通过所有数据包到达的 C# UDP 数据包丢失(WireShark)

c# - 在文本文件中搜索字符串及其上一句和下一句

c++ - 在 Visual Studio 中编译 CLD2

.net - 使用 IHttpHandler 时,Firefox 无法正确处理内容类型

c# - .NET 中的小数点不准确

java - ElementNSImpl 到字符串

web-services - SOA/Web 服务分页

时间:2019-03-09 标签:c#xorfunctionality

java - 在 Mirth 自定义 Web 服务中获取目的地响应

c# - 如何将字母转换为数字并打印出 BTEC 最终成绩