c#怎么解析soap调用webservice返回字符串的xml格式的字符串

C#调用JAVA的WebService方法_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
C#调用JAVA的WebService方法
上传于||文档简介
&&关​于​.​n​e​t​和​j​a​v​a​的​w​e​b​s​e​r​v​i​c​e​相​关​技​术​介​绍
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
你可能喜欢C#分析本地WSDL文件,并调用对应的WebService接口发送SOAP消息的处理方法 - C#当前位置:& &&&C#分析本地WSDL文件,并调用对应的WebService接口发C#分析本地WSDL文件,并调用对应的WebService接口发送SOAP消息的处理方法&&网友分享于:&&浏览:561次求教:C#分析本地WSDL文件,并调用对应的WebService接口发送SOAP消息的处理方法。背景:.Net2.0/C#下开发WinForm程序,模拟客户端向WebService服务端发送SOAP请求,现有一WSDL文件,期待:1.C#能够根据本地的WSDL文件解析出该文件中包含的WebService调用方法;2.第1步解析成功后,能够调用指定方法,向WebService服务端发送SOAP消息(SOAP消息的固定格式部分由调用方法产生,具体的消息内容我自己填充)。不知道有没有朋友做过类似的代码,期望分享一下,我查了很久都没找到理想的代码,请朋友们赐教,谢谢。PS:分数不够可以再加。------解决方案--------------------
在C:\Program Files\Microsoft SDKs里面搜索svcutil,用它在命令行下生成代理类,方法如下: &svcutil http://service/metadataEndpoint
- 通过正在运行的服务或联机元数据文档生成客户端代码。 &svcutil *.wsdl *.xsd /language:C#
- 从本地元数据文档生成客户端代码。 &svcutil /dconly *.xsd /language:VB
- 从本地架构文档生成 VisualBasic 形式的数据协定类型。 &svcutil /t:metadata http://service/metadataEndpoint
- 从正在运行的服务下载元数据文档 &svcutil myAssembly.dll
- 为程序集中的服务协定和关联类型生成元数据文档 &svcutil myServiceHost.exe /serviceName:myServiceName
- 为程序集中的服务以及所有关联的服务协定和数据类型生成元数据文档 &svcutil myServiceHost.exe /dconly
- 为程序集中的数据类型生成元数据文档 &svcutil /validate /serviceName:myServiceName myServiceHost.exe
- 验证服务承载 &svcutil /t:xmlserializer myContractLibrary.exe
- 为程序集中任何服务协定所使用的 XmlSerializer 类型生成序列化类型
------解决方案--------------------
分析WSDL,动态调用Web Servicehttp://topic.csdn.net/u//08c8ca6f-3733-40ff-840e-d6ca6894ab35.html
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有君,已阅读到文档的结尾了呢~~
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
C#开发XMLWebService接口(SOAP)
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口今天看啥 热点:
C# 通过Get、Post、Soap调用WebService的方法,实现代码来源于网络,我只是作了一些修改!
using System.W
using System.X
using System.C
using System.N
using System.T
using System.IO;
using System.Xml.S
/// &summary&
利用WebRequest/WebResponse进行WebService调用的类
/// &/summary&
public class WebServiceHelper
//&webServices&
&protocols&
&add name="HttpGet"/&
&add name="HttpPost"/&
&/protocols&
//&/webServices&
private static Hashtable _xmlNamespaces = new Hashtable();//缓存xmlNamespace,避免重复调用GetNamespace
/// &summary&
/// 需要WebService支持Post调用
/// &/summary&
public static XmlDocument QueryPostWebService(String URL, String MethodName, Hashtable Pars)
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(URL + "/" + MethodName);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
SetWebRequest(request);
byte[] data = EncodePars(Pars);
WriteRequestData(request, data);
return ReadXmlResponse(request.GetResponse());
/// &summary&
/// 需要WebService支持Get调用
/// &/summary&
public static XmlDocument QueryGetWebService(String URL, String MethodName, Hashtable Pars)
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(URL + "/" + MethodName + "?" + ParsToString(Pars));
request.Method = "GET";
request.ContentType = "application/x-www-form-urlencoded";
SetWebRequest(request);
return ReadXmlResponse(request.GetResponse());
/// &summary&
/// 通用WebService调用(Soap),参数Pars为String类型的参数名、参数值
/// &/summary&
public static XmlDocument QuerySoapWebService(String URL, String MethodName, Hashtable Pars)
if (_xmlNamespaces.ContainsKey(URL))
return QuerySoapWebService(URL, MethodName, Pars, _xmlNamespaces[URL].ToString());
return QuerySoapWebService(URL, MethodName, Pars, GetNamespace(URL));
/// &summary&
/// 通用WebService调用(Soap)
/// &/summary&
/// &param name="URL"&&/param&
/// &param name="MethodName"&&/param&
/// &param name="Pars"&&/param&
/// &param name="XmlNs"&&/param&
/// &returns&&/returns&
private static XmlDocument QuerySoapWebService(String URL, String MethodName, Hashtable Pars, string XmlNs)
_xmlNamespaces[URL] = XmlNs;//加入缓存,提高效率
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(URL);
request.Method = "POST";
request.ContentType = "text/ charset=utf-8";
request.Headers.Add("SOAPAction", "\"" + XmlNs + (XmlNs.EndsWith("/") ? "" : "/") + MethodName + "\"");
SetWebRequest(request);
byte[] data = EncodeParsToSoap(Pars, XmlNs, MethodName);
WriteRequestData(request, data);
XmlDocument doc = new XmlDocument(), doc2 = new XmlDocument();
doc = ReadXmlResponse(request.GetResponse());
XmlNamespaceManager mgr = new XmlNamespaceManager(doc.NameTable);
mgr.AddNamespace("soap", "http://schemas.xmlsoap.org/soap/envelope/");
String RetXml = doc.SelectSingleNode("//soap:Body/*/*", mgr).InnerX
doc2.LoadXml("&root&" + RetXml + "&/root&");
AddDelaration(doc2);
return doc2;
/// &summary&
/// 通过WebService的WSDL获取XML名称空间
/// &/summary&
/// &param name="URL"&&/param&
/// &returns&&/returns&
private static string GetNamespace(String URL)
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL + "?WSDL");
SetWebRequest(request);
WebResponse response = request.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
XmlDocument doc = new XmlDocument();
doc.LoadXml(sr.ReadToEnd());
sr.Close();
return doc.SelectSingleNode("//@targetNamespace").V
/// &summary&
/// 动态生成SOP请求报文内容
/// &/summary&
/// &param name="Pars"&&/param&
/// &param name="XmlNs"&&/param&
/// &param name="MethodName"&&/param&
/// &returns&&/returns&
private static byte[] EncodeParsToSoap(Hashtable Pars, String XmlNs, String MethodName)
XmlDocument doc = new XmlDocument();
doc.LoadXml("&soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"&&/soap:Envelope&");
AddDelaration(doc);
XmlElement soapBody = doc.CreateElement("soap", "Body", "http://schemas.xmlsoap.org/soap/envelope/");
XmlElement soapMethod = doc.CreateElement(MethodName);
soapMethod.SetAttribute("xmlns", XmlNs);
foreach (string k in Pars.Keys)
XmlElement soapPar = doc.CreateElement(k);
soapPar.InnerXml = ObjectToSoapXml(Pars[k]);
soapMethod.AppendChild(soapPar);
soapBody.AppendChild(soapMethod);
doc.DocumentElement.AppendChild(soapBody);
return Encoding.UTF8.GetBytes(doc.OuterXml);
/// &summary&
/// 将对象转换成XML节点格式
/// &/summary&
/// &param name="o"&&/param&
/// &returns&&/returns&
private static string ObjectToSoapXml(object o)
XmlSerializer mySerializer = new XmlSerializer(o.GetType());
MemoryStream ms = new MemoryStream();
mySerializer.Serialize(ms, o);
XmlDocument doc = new XmlDocument();
doc.LoadXml(Encoding.UTF8.GetString(ms.ToArray()));
if (doc.DocumentElement != null)
return doc.DocumentElement.InnerX
return o.ToString();
/// &summary&
/// 设置WEB请求
/// &/summary&
/// &param name="request"&&/param&
private static void SetWebRequest(HttpWebRequest request)
request.Credentials = CredentialCache.DefaultC
request.Timeout = 10000;
/// &summary&
/// 设置请求数据
/// &/summary&
/// &param name="request"&&/param&
/// &param name="data"&&/param&
private static void WriteRequestData(HttpWebRequest request, byte[] data)
request.ContentLength = data.L
Stream writer = request.GetRequestStream();
writer.Write(data, 0, data.Length);
writer.Close();
/// &summary&
/// 获取字符串的UTF8码字符串
/// &/summary&
/// &param name="Pars"&&/param&
/// &returns&&/returns&
private static byte[] EncodePars(Hashtable Pars)
return Encoding.UTF8.GetBytes(ParsToString(Pars));
/// &summary&
/// 将Hashtable转换成WEB请求键值对字符串
/// &/summary&
/// &param name="Pars"&&/param&
/// &returns&&/returns&
private static String ParsToString(Hashtable Pars)
StringBuilder sb = new StringBuilder();
foreach (string k in Pars.Keys)
if (sb.Length & 0)
sb.Append("&");
sb.Append(HttpUtility.UrlEncode(k) + "=" + HttpUtility.UrlEncode(Pars[k].ToString()));
return sb.ToString();
/// &summary&
/// 获取Webservice响应报文XML
/// &/summary&
/// &param name="response"&&/param&
/// &returns&&/returns&
private static XmlDocument ReadXmlResponse(WebResponse response)
StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
String retXml = sr.ReadToEnd();
sr.Close();
XmlDocument doc = new XmlDocument();
doc.LoadXml(retXml);
/// &summary&
/// 设置XML文档版本声明
/// &/summary&
/// &param name="doc"&&/param&
private static void AddDelaration(XmlDocument doc)
XmlDeclaration decl = doc.CreateXmlDeclaration("1.0", "utf-8", null);
doc.InsertBefore(decl, doc.DocumentElement);
以上是在不引用WEB服务的条件下动态调用WEB服务方法,如果该服务地址不确定或后期有可能会变动,则采用上述这些方法会比较好,当然如果服务地址不会出现变更的情况下,可以在VS中直接引用WEB服务,然后就可调用自动生成的SOAPClient类来调用相应的WEB服务方法,这样就简单很多,如下:
avar client = new SmsService.wmgwSoapClient(); //wmgwSoapClient就是引用WEB服务后自动生成的类
string result = client.MongateSendSubmit(tuserId.Text, tpassword.Text, tpszMobis.Text, tpszMsg.Text, int.Parse(tiMobiCount.Text),
tpszSubPort.Text, tMsgId.Text);
更多IT相关技术文章与资讯,欢迎光临我的个人网站:
相关搜索:
相关阅读:
相关频道:
&&&&&&&&&&&&&&&&
Asp.Net教程最近更新基于SOAP的WebService的调用原理 - 推酷
基于SOAP的WebService的调用原理
SOAP的概念应该不是什么新鲜事物了。简单的说,SOAP是以把数据以XML的方式组合起来,然后通过HTTP协议(也可以是其它协议,但是通常总是用http协议)和远程服务进行通信的一个标准,也可以把它认为是一个中间件,起着沟通桥梁的作用。因为当所有的服务都使用同一种标准,那么沟通就比较容易了。
当然不得不承认,SOAP格式的报文内容冗余,并且依赖于定义好的XML schemas,对于手工创建SOAP报文十分复杂,需要借助一些工具来简化工作。因此越来越多的Web服务倾向于使用Restful风格的WebService。
根据SOAP的协议,只需要发送有效的SOAP消息到服务端,就能实现通信。那么如何生成有效的SOAP消息?SOAP
详细说明了SOAP的格式,但官方文档很长,一般人没耐心去读完,大多时候仅仅在需要的时候去查一下,也可以去
学习一下简化版的。这里介绍一个工具,SoapUI,可以去它官网
下载,它可以通过WSDL生成请求的SOAP消息格式。
ASP.NET中,采用向导创建的Web服务,是SOAP风格的。假设我们创建一个web服务。使用向导,完成如下的代码:
using System.Collections.G
using System.L
using System.W
using System.Web.S
namespace WebService1
/// &summary&
/// Summary description for WebService1
/// &/summary&
[WebService(Namespace = &http://tempuri.org/&)]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ponentModel.ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
// [System.Web.Script.Services.ScriptService]
public class WebService1 : System.Web.Services.WebService
[WebMethod]
public string HelloWorld()
return &Hello World&;
[WebMethod]
public int Add(int a, int b)
return a +
/// &summary&
/// 把公制单位的汽车转化成以英制单位表示的汽车
/// &/summary&
/// &param name=&s&&&/param&
/// &returns&&/returns&
[WebMethod]
public car ChangeCarUnit(car s)
s.length = s.length * 3.3m;
s.width = s.width * 3.3m;
s.weight = s.width * 2.2m;
public class car
public string model = &&;
public decimal length = 0;
public decimal width = 0;
public decimal weight = 0;
方法都写在WebService1.asmx文件中,通过web服务的WSDL,可以得到它的SOAP消息格式。这两采用SoapUI输入指定的WSDL文件,即可以自动生成SOAP消息格式。
650) this.width=650;" style="border-right:0border-bottom:0border-top:0border-left:0" title="clipboard[26]" border="0" alt="clipboard[26]" src="/uAfy2a.png!web" height="277" />
注意:在ASP.net中,可以通过访问WebService1.asmx并且输入查询字符串?WSDL,即在IE浏览器中输入WebService1.asmx?wsdl就可以获得WSDL文件。
还有一点要注意的是,微软生成的WSDL文件,有2个binding,分别表示soap1.1和soap1.2,它都支持。
650) this.width=650;" style="border-right:0border-bottom:0border-top:0border-left:0" title="clipboard[27]" border="0" alt="clipboard[27]" src="/77B32y.png!web" height="291" />
因此在SoapUI中可以看到2个不同的WebService接口,其实是大同小异的。
650) this.width=650;" style="border-right:0border-bottom:0border-top:0border-left:0" title="clipboard[28]" border="0" alt="clipboard[28]" src="/UbAneu.png!web" height="249" />
双击Add的Request,就可以得到SOAP消息格式了,其中的问号可以输入指定的值,然后点击执行按钮,就又可以得到响应的SOAP消息格式了。
650) this.width=650;" style="border-right:0border-bottom:0border-top:0border-left:0" title="clipboard[29]" border="0" alt="clipboard[29]" src="/fuq26j.png!web" height="447" />
通过SoapUI生成SOAP消息后,就可以自己构造SOAP消息来调用SOAP风格的WebService,因此,只要解决如何生成请求的SOAP消息,我们甚至可以自己实现一个Web服务调用框架,无论是基于PHP,ASP.net,还是javascript。
-----------------------------------------------------------------------
下面的演示如何在javascript中发送SOAP。
一下代码调用之前WebService1中的方法ChangeCarUnit,这个方法把汽车参数从公制为单位的转换成英制单位。
首先手动通过SoapUI获取SOAP消息格式。生成并补充数据,得到如下的格式
&soapenv:Envelope xmlns:soapenv=&http://schemas.xmlsoap.org/soap/envelope/& xmlns:tem=&http://tempuri.org/&&
&soapenv:Header/&
&soapenv:Body&
&tem:ChangeCarUnit&
&!--Optional:--&
&!--Optional:--&
&tem:model&Passat&/tem:model&
&tem:length&4.87&/tem:length&
&tem:width&1.834&/tem:width&
&tem:weight&1435&/tem:weight&
&/tem:ChangeCarUnit&
&/soapenv:Body&
&/soapenv:Envelope&
因此只需将这串xml发送到webservice既可。
通过jquery ajax实现。
代码如下:
&script type=&text/javascript&&
$(function () {
$(&#btnclick&).click(function () {
var soapmessage = &&;
soapmessage += '&soapenv:Envelope xmlns:soapenv=&http://schemas.xmlsoap.org/soap/envelope/& xmlns:tem=&http://tempuri.org/&&';
soapmessage += '&soapenv:Header/&';
soapmessage += '&soapenv:Body&';
soapmessage += '&tem:ChangeCarUnit&';
soapmessage += ' &!--Optional:--&';
soapmessage += ' &tem:s&';
soapmessage += ' &!--Optional:--&';
soapmessage += ' &tem:model&Passat&/tem:model&';
soapmessage += ' &tem:length&4.87&/tem:length&';
soapmessage += ' &tem:width&1.834&/tem:width&';
soapmessage += ' &tem:weight&1435&/tem:weight&';
soapmessage += ' &/tem:s&';
soapmessage += '&/tem:ChangeCarUnit&';
soapmessage += ' &/soapenv:Body&';
soapmessage += '&/soapenv:Envelope&';
var option = {
url: 'http://localhost:28689/WebService1.asmx',
type: 'POST',
contentType: 'text/xml',
success: function (result) {
alert(result.documentElement.textContent);
data: soapmessage
$.ajax(option);
&input value='click' type=&button& id=&btnclick& /&
点击按钮后,就会将soap消息post到web服务器,并且得到返回消息,返回消息也是基于XML的文本。
通过上面的实例,我们可以通过编写专用的工具来生成SOAP消息,通过封装后,再通过POST方式(比如c#中的HttpWebRequest)来实现webserverice的调用。
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
没有分页内容
图片无法显示
视频无法显示
与原文不一致}

我要回帖

更多关于 c webservice返回xml 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信