将SOAP信封发布到WCF服务
问题描述:
我有以下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");
我得到不同的是服务器所期望的 “application /肥皂+ xml的;字符集= UTF-8”。
如果有人知道如何称呼它,请帮助。
谢谢 Adrya
答
经过挖我设法将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:你已经解决了错误的问题。你应该遵循marc_s的建议。只需选择服务的URL,就可以在服务之间切换。 – 2010-09-18 17:20:44
我解决了我的问题。我无法做到“正常的方式”,因为一切都在运行时发生。在运行时我不知道这些服务,我没有他们的代理类,我拥有的只是URL和SOAP请求。 – Adrya 2010-09-18 18:05:45