Мне нужна помощь в публикации XML в сервис WCF.По сути, проблема, с которой я сталкиваюсь, - это HTTP-ответ «400: Плохой запрос» - как бы наглядно это ни звучало, я изо всех сил пытаюсь найти какие-либо ответы!
Прежде всего, сервис, который я создалв WCF основан на существующем WSDL, изначально взятом из веб-службы IBM WebSphere.После некоторых манипуляций (удаление вложений MIME, загрузка некоторых удаленных схем) мне удалось заставить svcutil сгенерировать интерфейс службы, который для всех целей и задач представляется действительным.
Я реализовал интерфейс в моей службе WCFи при запуске тестового клиента WCF я могу подключиться к сервису, отправить запрос и получить ответ без проблем.Пока все хорошо!
При переходе к тестовому приложению для публикации XML в веб-сервисах через класс HttpWebRequest я начинаю получать ответы «400: Плохой запрос», даже если я использую XML, предоставленный тестовым клиентом WCF.
Я использовал трассировку WCF для вывода сообщений, которые он получает, и есть одно поразительное отличие - все сообщения тестового клиента WCF заполнены правильно и отображают информацию о заголовке и т. Д., Все один раз измоя утилита для тестирования SOAP отображается как «Неправильно».Глядя на вкладку сообщений, отправляемые вручную сообщения POST имеют тело, заключенное в элемент:
<MessageLogTraceRecord><![CDATA[<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<To s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://localhost:57567/Service1.svc</To>
<Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://www.nowhere.co.uk/RequestService/RequestOperation</Action>
</s:Header>
</s:Envelope>
]]></MessageLogTraceRecord>
В то время как сообщения WCF выглядят так:
<MessageLogTraceRecord>
<HttpRequest xmlns="http://schemas.microsoft.com/2004/06/ServiceModel/Management/MessageTrace">
<Method>POST</Method>
<QueryString></QueryString>
<WebHeaders>
<Connection>Keep-Alive</Connection>
<Content-Length>185</Content-Length>
<Content-Type>text/xml; charset=utf-8</Content-Type>
<Accept-Encoding>gzip, deflate</Accept-Encoding>
<Expect>100-continue</Expect>
<Host>localhost:57567</Host>
<VsDebuggerCausalityData>uIDPo4VLDcJD5AZDjB5sdmoeakEAAAAAH/hWABuWQ0iiq47QDHh0GlelCLcEx7FLibxRvpq1tTgACQAA</VsDebuggerCausalityData>
<SOAPAction>"http://www.nowhere.co.uk/RequestService/RequestOperation"</SOAPAction>
</WebHeaders>
</HttpRequest>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<To s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://localhost:57567/Service1.svc</To>
<Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://www.nowhere.co.uk/RequestService/RequestOperation</Action>
</s:Header>
</s:Envelope>
</MessageLogTraceRecord>
У меня естьПопытка трассировки в Fiddler безрезультатна - я не могу заставить тестового клиента WCF отправлять запросы через созданный им прокси, несмотря на изменение файла app.config.Я проследил мой SOAP-запрос, однако могу видеть следующее:
Content-Type: text/xml; charset="utf-8"
Accept-Encoding: gzip, deflate
Host: 127.0.0.1:57567
SOAPAction: "http://www.nowhere.co.uk/RequestService/RequestOperation"
Content-Length: 459
Expect: 100-continue
Connection: Keep-Alive
<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<To s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://localhost:57567/Service1.svc</To>
<Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://www.nowhere.co.uk/RequestService/RequestOperation</Action>
</s:Header>
</s:Envelope>
Насколько я могу судить, отправляемое сообщение должно быть в порядке - вне заголовков и содержимого сообщения, которое я не могупосмотрим, что еще можно отправить.
Последнее, что я должен сказать, это то, что я ни в коем случае не эксперт WCF, и мне пришлось изменить конкретное значение SOAPAction из-за коммерческой чувствительности ..
Кто-нибудь может предложить какую-нибудь помощь по этой довольно неприятной проблеме?
Заранее спасибо