Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
要读取.NET中的状态500错误。Fiddler向我展示了可读的回答,为什么';我不能进入.NET吗?_.net_Http_Soap - Fatal编程技术网

要读取.NET中的状态500错误。Fiddler向我展示了可读的回答,为什么';我不能进入.NET吗?

要读取.NET中的状态500错误。Fiddler向我展示了可读的回答,为什么';我不能进入.NET吗?,.net,http,soap,.net,Http,Soap,在Fiddler中,我可以传入请求并得到响应。很好,我希望我的.NET代码能够处理这个问题并分析响应消息。在下面的例子中,有一条有意义的信息。但是使用HttpWebRequest和HttpWebResponse,我无法获得这些信息 以下是Fiddler的回复: HTTP/1.1 500 Internal Server Error Date: Sun, 25 Mar 2012 15:50:31 GMT Transfer-Encoding: chunked Content-Type: text/xm

在Fiddler中,我可以传入请求并得到响应。很好,我希望我的.NET代码能够处理这个问题并分析响应消息。在下面的例子中,有一条有意义的信息。但是使用HttpWebRequest和HttpWebResponse,我无法获得这些信息

以下是Fiddler的回复:

HTTP/1.1 500 Internal Server Error
Date: Sun, 25 Mar 2012 15:50:31 GMT
Transfer-Encoding: chunked
Content-Type: text/xml; charset=ISO-8859-1
X-Powered-By: Servlet/2.5 JSP/2.1

010e
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><soap:Fault><faultcode>soap:Client</faultcode><faultstring>WSS header is missing from request. Can't do username token authentication.</faultstring></soap:Fault></soap:Body></soap:Envelope>
0000

我无法从exception对象获得更多信息。但我知道答案应该是可读的。希望有一些较低级别的http类可以使用,但我现在还不知道。我不想.NET保护我不受真正的HTTP协议的影响。

不清楚您试图用
respp
做什么。(我注意到您也没有使用
resp2
)例如,这有什么作用:

catch (WebException ex)
{
    using (HttpWebResponse respp = (HttpWebResponse) ex.Response)
    {
        log.Info((int)respp.StatusCode);
        log.Error(ex.ToString());
        log.Error(new StreamReader(respp.GetResponseStream()).ReadToEnd());
    }
}

(我一直不清楚您是否真的需要处理在
WebException
中获得的
WebResponse
,但这可能是个好主意。您可能也想处理响应流,尽管我相信处理响应已经够好了。)不清楚您试图用
respp
做什么。(我注意到您也没有使用
resp2
)例如,这有什么作用:

catch (WebException ex)
{
    using (HttpWebResponse respp = (HttpWebResponse) ex.Response)
    {
        log.Info((int)respp.StatusCode);
        log.Error(ex.ToString());
        log.Error(new StreamReader(respp.GetResponseStream()).ReadToEnd());
    }
}
(我一直不清楚您是否真的需要处理在
WebException
中获得的
WebResponse
,但这可能是一个好主意。您可能也想处理响应流,尽管我认为处理响应已经足够好了。)

我认为您可以转而捕获响应流

我想你能赶上火车


当我发布请求时,它抛出500个异常,所以我在这里捕获它。使用respp(我在代码中对“response”有很多变体,因此有一个有趣的名字),我试图读取存储在异常中的响应。但也许这不是一个合适的地方。啊哈-我看到了混乱-甚至没有使用“数据”调用。丹尼尔威廉姆斯:但是你还没有说当你尝试使用这个反应时会发生什么。我的代码尝试读取响应的内容,而你的代码则没有。你尝试了什么,结果如何?啊哈,是的,我明白了。我只是在VS2010中查看局部变量,没有尝试读取响应流。瞧,那条小溪正是我想要的信息。非常感谢。当我发布请求时,它抛出500个异常,所以我在这里捕获它。使用respp(我在代码中对“response”有很多变体,因此有一个有趣的名字),我试图读取存储在异常中的响应。但也许这不是一个合适的地方。啊哈-我看到了混乱-甚至没有使用“数据”调用。丹尼尔威廉姆斯:但是你还没有说当你尝试使用这个反应时会发生什么。我的代码尝试读取响应的内容,而你的代码则没有。你尝试了什么,结果如何?啊哈,是的,我明白了。我只是在VS2010中查看局部变量,没有尝试读取响应流。瞧,那条小溪正是我想要的信息。非常感谢。
try
  {
    // do your thing
  }
  catch (SoapException soapEx)
  {
    MessageBox.Show(soapEx.Code.ToString());
    //Load the Detail element of the SoapException object
    XmlDocument doc = new XmlDocument();
    doc.LoadXml(soapEx.Detail.OuterXml);
    XmlNamespaceManager nsManager = new
      XmlNamespaceManager(doc.NameTable);
    // Add the namespace to the NamespaceManager
    nsManager.AddNamespace("errorNS",
      "WSSoapException");
    XmlNode Node =
      doc.DocumentElement.SelectSingleNode("errorNS:Error",
                                           nsManager);
    string errorNumber =
      Node.SelectSingleNode("errorNS:ErrorNumber",
                                    nsManager).InnerText;
    string errorMessage =
    Node.SelectSingleNode("errorNS:ErrorMessage",
                                nsManager).InnerText;
    string errorSource =
    Node.SelectSingleNode("errorNS:ErrorSource",
                                nsManager).InnerText;
    MessageBox.Show("Error Number is " + errorNumber);
    MessageBox.Show("Error Message is " + errorMessage);
    MessageBox.Show("Error Source is " + errorSource);

  }
  catch (Exception ex)
  {
    MessageBox.Show(ex.Message);
  }