WCf服务获取响应方法中的内部500错误

时间:2011-07-18 16:50:57

标签: wcf getresponse internal-server-error

以下是我的请求,我在getresponse上收到500内部服务器错误

string requestData = "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\"><s:Header><h:HeaderItem xmlns:h=\"http://tempuri.org/\">a header item</h:HeaderItem><ActivityId CorrelationId=\"090c553b-bfcc-4e4f-94cd-1b4333fe82a9\" xmlns=\"http://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics\">377a454b-b543-4c6f-b4ac-3981029b60e6</ActivityId></s:Header><s:Body><string xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/\">a body item</string></s:Body></s:Envelope>";
byte[] requestDataBytes = Encoding.UTF8.GetBytes(requestData);
 HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost/WebService/");
                request.Method = "POST";
                request.ContentType = "text/xml; charset=utf-8";
                request.Headers.Add("SOAPAction", "http://tempuri.org/IWebService/GetMessage");
                request.ContentLength = requestDataBytes.Length;

                StreamWriter streamWriter = new StreamWriter(request.GetRequestStream());
                streamWriter.Write(requestData);
                streamWriter.Flush();
                streamWriter.Close();
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                StreamReader streamReader = new StreamReader(response.GetResponseStream());
                string responseBody = streamReader.ReadToEnd();

2 个答案:

答案 0 :(得分:1)

我可能会给你一个答案。

将您设置标题的位置移动到之前设置内容类型的位置,然后重试代码,如下所示:

       request.Headers.Add("SOAPAction", "http://tempuri.org/IWebService/GetMessage");
       request.ContentType = "text/xml; charset=utf-8";

我根据MS的WebRequest对象的ContentType属性的文档提出了这个建议:

MS docs on WebRequest

  

此属性的值存储在WebHeaderCollection中。如果   设置了WebHeaderCollection,属性值丢失。

现在,我意识到我们明确地设置了WebHeaderCollection,但是你在那个集合中设置了一个标题,并且我怀疑至少存在这个问题的可能性 - 将现有的ContentType呈现为空白,并在Web服务的入站端被解释为默认值。

也许是一个长镜头,但它可能值得一试。

答案 1 :(得分:0)

您应该在服务器上启用WCF跟踪日志记录,并查看它是否指示错误。通常,在访问应用程序代码之前反序列化期间或WCF层中发生的错误将写入此日志。

有关设置WCF跟踪记录的详细信息,see herehere