2010-09-17 2 views
3

У меня есть следующее сообщение SOAP, которое я хочу отправить в службу WCF и получить ответ.Опубликовать Конверт SOAP в службу WCF

"<s:Envelope xmlns:a=\"http://www.w3.org/2005/08/addressing\" xmlns:s=\"http://www.w3.org/2003/05/soap-envelope\">\r\n <s:Header>\r\n <a:Action s:mustUnderstand=\"1\">http://schemas.devleap.com/OrderService/IOrderService/InsertOrder</a:Action>\r\n <a:MessageID>urn:uuid:4cb619b7-365b-4108-880f-b302029d03c2</a:MessageID>\r\n <a:ReplyTo>\r\n  <a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>\r\n </a:ReplyTo>\r\n </s:Header>\r\n <s:Body>\r\n <InsertOrder xmlns=\"http://schemas.devleap.com/OrderService\">\r\n  <order xmlns:d4p1=\"http://schemas.devleap.com/OrderService/Order\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\">\r\n  <d4p1:IdCustomer>2</d4p1:IdCustomer>\r\n  <d4p1:IdOrder>46</d4p1:IdOrder>\r\n  <d4p1:OrderItems xmlns:d5p1=\"http://schemas.devleap.com/OrderService/OrderItems\" xmlns:d5p2=\"http://schemas.devleap.com/OrderService/OrderItem\">\r\n   <d5p1:OrderItem>\r\n   <d5p2:IdProduct>P01</d5p2:IdProduct>\r\n   <d5p2:Quantity>5</d5p2:Quantity>\r\n   <d5p2:EuroPrice>20</d5p2:EuroPrice>\r\n   </d5p1:OrderItem>\r\n   <d5p1:OrderItem>\r\n   <d5p2:IdProduct>P01</d5p2:IdProduct>\r\n   <d5p2:Quantity>5</d5p2:Quantity>\r\n   <d5p2:EuroPrice>20</d5p2:EuroPrice>\r\n   </d5p1:OrderItem>\r\n  </d4p1:OrderItems>\r\n  </order>\r\n </InsertOrder>\r\n </s:Body>\r\n</s:Envelope>" 

Как я могу опубликовать этот SOAP для службы WCF? Я пробовал это, но я получаю «Удаленный сервер вернул ошибку: (500) Внутренняя ошибка сервера». исключение.

 using (var client = new WebClient()) 
     { 

      client.Headers.Add("Content-Type", "application/soap+xml; charset=utf-8"); 


      var response = client.UploadString("http://localhost:8000/OrderService", data); 

     } 

Если я удалить заголовок из конверта и добавьте:

client.Headers.Add("Content-Type", "application/soap+xml; charset=utf-8"); 
client.Headers.Add("SOAPAction", "\"http://schemas.devleap.com/OrderService/IOrderService/InsertOrder\""); 

я получаю ту же ошибку.

Если я поставил

client.Headers.Add("Content-Type", "text/xml; charset=utf-8"); 

я получаю исключение, что сервер ожидает "приложения/мыло + XML; кодировка = UTF-8".

Если кто-то знает, как правильно это назвать, пожалуйста, помогите.

Спасибо, Adrya

ответ

1

После более рытье мне удалось опубликовать SOAP к службе. Вот код:

 WebClient myWebClient = new WebClient(); 
     myWebClient.Headers.Add("Content-Type", "application/soap+xml; charset=utf-8"); 
     byte[] byteArray = Encoding.ASCII.GetBytes(postData); 
     byte[] responseArray = myWebClient.UploadData("http://localhost:8000/OrderService", "POST", byteArray); 
     Console.WriteLine("\nResponse received was {0}", Encoding.ASCII.GetString(responseArray)); 
     Console.ReadKey(); 
+1

-1: вы решили неправильную проблему. Вы должны были следовать рекомендациям marc_s. Вы могли бы переключиться между службами, просто выбрав URL-адрес службы. –

+4

Я решил свою проблему. Я не могу сделать это «обычным способом», потому что все происходит во время выполнения. Во время выполнения я не знаю услуг, у меня нет их прокси-классов, у меня есть URL-адрес и запрос SOAP. – Adrya

Смежные вопросы