0

以下是我的请求,我在 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();
4

2 回答 2

1

我可能会给你一个答案。

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

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

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

WebRequest 上的 MS 文档

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

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

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

于 2012-04-24T22:10:48.647 回答
0

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

有关设置 WCF 跟踪日志记录的更多信息,请参阅此处此处

于 2011-07-18T17:20:40.187 回答