以下是我的请求,我在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();
答案 0 :(得分:1)
我可能会给你一个答案。
将您设置标题的位置移动到之前设置内容类型的位置,然后重试代码,如下所示:
request.Headers.Add("SOAPAction", "http://tempuri.org/IWebService/GetMessage");
request.ContentType = "text/xml; charset=utf-8";
我根据MS的WebRequest对象的ContentType属性的文档提出了这个建议:
此属性的值存储在WebHeaderCollection中。如果 设置了WebHeaderCollection,属性值丢失。
现在,我意识到我们不明确地设置了WebHeaderCollection,但是你在那个集合中设置了一个标题,并且我怀疑至少存在这个问题的可能性 - 将现有的ContentType呈现为空白,并在Web服务的入站端被解释为默认值。
也许是一个长镜头,但它可能值得一试。
答案 1 :(得分:0)