【问题标题】:Trace/Log SOAP XML Request and Response AND HTTP status code from SOAP .Net Client App来自 SOAP .Net 客户端应用程序的跟踪/记录 SOAP XML 请求和响应以及 HTTP 状态代码
【发布时间】:2015-10-22 11:40:32
【问题描述】:

我有 C# .Net 2.0 应用程序,它是通过 WebReferences 添加到项目的 SOAP Web 服务客户端。 .Net 创建方便的包装类扩展 SoapHttpClientProtocol,从而隐藏通信中的所有内容,如 XML 和 SOAP XML 请求/响应的序列化/反序列化。

我需要记录对 WebServices 的请求和响应,尤其是我希望从 HTTP 通信的响应中获取 HTTP 状态代码。

到目前为止,我已经实现了 SOAP 扩展并获取了原始的 SOAP XML 请求/响应,但是我无法获取通信的 HTTP SOAP 响应的 HTTP 状态代码?


编辑:所以我有一个 SoapHttpClientProtocol 实例(由 WSDL 生成),我想从通信中获取 HTTP 状态代码。

我反编译了

private object[] ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, bool asyncCall)

奇怪的是里面有这个条件,其实在status 500的时候不会报错?

if (num1 >= 300 && num1 != 500 && num1 != 400)
{
    throw new WebException(RequestResponseUtils.CreateResponseExceptionString(httpWebResponse, responseStream), null, WebExceptionStatus.ProtocolError, httpWebResponse);
}

编辑2: 所以我的问题通常是我有 HTTP 状态 500 的响应,它实际上作为成功传递,没有抛出 WebException,由于上面的代码对我不起作用,我想检测这种情况,这就是为什么我需要HTTP 状态码。

HTTP/1.1 500 Internal Server Error

【问题讨论】:

    标签: c# .net http soap soap-extension


    【解决方案1】:

    如果你想要请求/响应的 Http 包装器,你可以试试这样的Call web APIs in C# using .NET framework 3.5

    【讨论】:

    • 感谢您的回答。我正在使用 .NET 2.0,这是旧系统。而且我不想使用 HttpWebRequest/Response 类(实际上我从它们切换到 Web 引用,这给了我这个限制,现在我不能拥有 HTTP 状态代码)并自己编写/生成 XML。我问是否有可能从 SOAP 扩展中做到这一点,或者我应该为 HTTP apporach 编写类似于 soap extension 的方法?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    相关资源
    最近更新 更多