【发布时间】:2009-10-22 18:58:13
【问题描述】:
我想使用 C# 通过 http POST 请求调用 ASP.NET Web 服务(即我不想使用通过运行 wsdl.exe 生成的 SoapHttpClientProtocol 对象)。
据我所知,这个过程包括:
创建一个HttpWebRequest对象,该对象指向Web服务的url/方法,使用方法;
创建 SOAP xml 信封;
使用 XmlSerializer 对我想传递给 Web 方法的任何参数进行序列化;
发出请求并解析响应。
我想这样做,而不必复制和使用生成的代码。
(1) 看起来很简单;
(2) 我不知道这里的信封是不是标准的,或者它应该如何改变取决于我调用的webservice方法。如果服务需要,我想我可能需要添加自定义肥皂标题?
(3) 这样做的过程是什么?我假设我需要做这样的事情:
MyClass myObj;
XmlSerializer ser = new XmlSerializer(myObj.GetType());
TextWriter writer = new StringWriter();
ser.Serialize(writer, myObj);
string soapXml = writer.ToString();
writer.Close();
另外,我想我应该将soapXml 添加到soap:Body 元素中
(4) 我相信我也应该提取和反序列化 soap:Body 元素的内容。用(3)中的逆过程可以吗?
谢谢,
K.
【问题讨论】:
-
只是好奇你为什么要这么辛苦?为什么不使用久经考验的工具?
-
我在想,在 http 请求级别访问 Web 服务调用可以让我更好地控制诸如设置soap/http 标头之类的事情……此外,有时,要生成的 wsdl Web 服务客户端可能不可用(即使方法签名已知)...
标签: c# asp.net web-services soap