Внутренняя ошибка 500 в службе WCf, метод ответа - PullRequest
0 голосов
/ 18 июля 2011

Ниже моего запроса я получаю 500 внутренняя ошибка сервера в getresponse

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 ]

1 голос
/ 25 апреля 2012

У меня может быть ответ для вас.

Переместите строку, в которой вы устанавливаете свои заголовки, на точку до того, как вы установите тип контента, и повторите ваш код следующим образом:

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

Я делаю это предложение на основе документации для свойства ContentType для объекта WebRequest от MS:

MS документы по WebRequest

Значение для этого свойства хранится в WebHeaderCollection. Если WebHeaderCollection установлен, значение свойства потеряно.

Теперь я понимаю, что мы не явно устанавливаем WebHeaderCollection, но вы устанавливаете заголовок в этой коллекции, и это заставило меня подозревать, что Наименьшая вероятность того, что это может быть проблемой - сделать ваш существующий ContentType пустым и интерпретироваться как некоторое значение по умолчанию на входящей стороне веб-службы.

Может быть, длинный выстрел, но стоит попробовать.

0 голосов
/ 18 июля 2011

Вы должны включить трассировку WCF на вашем сервере и посмотреть, если это указывает на ошибку.Обычно ошибки, возникающие во время десериализации или в слоях WCF перед попаданием кода приложения, записываются в этот журнал.

Для получения дополнительной информации о настройке ведения журнала трассировки WCF, см. Здесь или здесь .

...