0

我有 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)

奇怪的是里面有这个条件,当状态为 500 时实际上不会抛出错误?

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

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

HTTP/1.1 500 Internal Server Error
4

1 回答 1

0

如果您想要请求/响应的 Http 包装器,您可以尝试类似Call web APIs in C# using .NET framework 3.5的方法。

于 2015-10-22T12:26:25.570 回答