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