向WCF服务发布SOAP信封

4
我有以下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\"");

i get the same error.

If i put

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

我收到了一个异常,服务器期望接收“application/soap+xml; charset=utf-8”的数据格式。如果有人知道如何正确调用,请帮忙解决。谢谢,Adrya。
1个回答

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来轻松切换服务。 - John Saunders
4
我解决了我的问题。我无法使用“正常方式”来解决,因为一切都在运行时发生。在运行时,我不知道服务是什么,也没有它们的代理类,我所拥有的仅仅是URL和SOAP请求。 - Adrya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接