这篇文章主要介绍了c#三种方法调用网络服务接口的相关资料,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
1、引用*.wsdl文件
网络服务服务端会提供wsdl文件,客户端通过该文件生成。铯文件以及生成。dll .
注意:若服务端只提供的了URL,在统一资源定位器后面加上?' wsdl '在浏览器上访问,复制页面内容,粘贴到文本文件,将文件后缀改为为wsdl ',即可得到wsdl文件。
通过统一资源定位器或wsdl文件都可生成。铯文件。
生成。铯文件的方法有两种,如下:
方法一:通过VS命令行工具生成
如上图所示,输入命令" wsdl /language:c# /n:CHEER .演示层/输出:生成类的物理路径(需先创建铯文件)网络服务接口统一资源定位器或wsdl文件物理路径"即可。
方法二:VS中添加外部工具(方便以后使用)
对工具菜单-外部工具-如下图
输入上图红框中的各个参数,其中,命令是:C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v 10.0 a \ bin \ NETFX 4。6 .1工具\ wsdl。exe,即wsdl.exe的物理路径。
初始目录:$(项目目录)表示当前项目根目录下。
命名空间使用时直接改成自定义的名称即可。
下图是该外部工具的使用,先自定义命名空间名称,再在出局:后面加上空格,再加上网络服务的统一资源定位器或wsdl文件物理路径
2、已知WebService接口的URL,直接调用
在对中,添加服务引用-高级-添加网引用直接输入网服务统一资源定位器
然后,直接实例化该命名空间下的类的对象,调用该接口下的各个方法即可。
3、动态调用WebService
先创建帮助类
///摘要
///动态调用网络服务的帮助类
////摘要
公共类WebServiceHelper
{
#区域InvokeWebService
///摘要
///动态调用网服务
////摘要
///param name='url'WSDL服务地址/param
///param name='methodname '方法名/param
///param name='args '参数/param
///返回/返回
公共对象InvokeWebService(字符串url,字符串方法名称,对象[]参数)
{
归还这个InvokeWebService(url,null,methodname,args);
}
///摘要
///动态调用网服务
////摘要
///param name='url'WSDL服务地址/param
///param name='classname '类名/param
///param name='methodname '方法名/param
///param name='args '参数/param
///返回/返回
公共对象InvokeWebService(字符串url,字符串类名,字符串方法名,对象[]参数)
{
string @ namespace=' EnterpriseServerBase .网络服务。“动态web调用”;
if((类名==null)| |(类名==' '))
{
classname=WebServiceHelper .GetWsClassName(URL);
}
尝试
{
//获取WSDL
WebClient WC=new WebClient();
如果(!网址ToUpper(1999年)。包含(《WSDL》)
{
url=字符串。格式("{0}"?“{1}”,url,“WSDL”);
}
溪流流=wc .OpenRead(网址);
服务描述sd=服务描述。读(流);
ServiceDescriptionImporter SDI=new ServiceDescriptionImporter();
sdi .AddServiceDescription(sd,'',' ');
代码命名空间cn=新代码命名空间(@ namespace);
//生成客户端代理类代码
CodeCompileUnit CCU=new CodeCompileUnit();
ccu .名称空间。添加(cn);
sdi .进口(cn、CCU);
CSharpCodeProvider ICC=new CSharpCodeProvider();
//设定编译参数
编译器参数CP list=新编译器参数();
cplist .GenerateExecutable=false
cplist .GenerateInMemory=true
cplist .引用程序集。添加('系统。dll’);
cplist .引用程序集。添加('系统.XML。dll’);
cplist .引用程序集。添加('系统.网络。服务。dll’);
cplist .引用程序集。添加('系统.数据。dll’);
//编译代理类
编译器结果cr=icc .CompileAssemblyFromDom(cplist,CCU);
if (true==cr .错误。HasErrors)
{
StringBuilder sb=new StringBuilder();
foreach(编译器铬中的错误行政长官.错误)
{
某人(有人的简写)追加(ce .ToString());
某人(有人的简写)追加(环境。换行符);
}
抛出新异常(某人.ToString());
}
//生成代理实例,并调用方法
系统。反射组装assembly=cr .已编译的程序集;
t型=装配. GetType(@namespace ' . '。classname,true,true);
对象obj=激活器创建实例(t);
系统反射。方法信息mi=t . get方法(方法名);
返回米.Invoke(obj,args);
}
接住(例外ex)
{
抛出新异常(例如。消息,新异常(例如内心异常。堆栈跟踪));
}
}
私有静态字符串GetWsClassName(字符串wsUrl)
{
string[] parts=wsUrl .拆分('/');
string[] pps=parts[parts .长度- 1]。拆分('.');
if (pps[0].包含('?'))
{
返回pps[0].拆分('?')[0];
}
返回PPS[0];
}
#结束区域
}
WebServiceHelper
WebServiceHelper
然后调用,如下
web service helper web service=new web service helper();
object obj=webService .InvokeWebService(' http://127。0 .0 .1:8001/网络服务1。asmx ',' Add ',新对象[] {22,33 });
数据表dt=obj as数据表
注意:该方法比价麻烦,每次调用InvokeWebService都是在内存中创建动态程序集,效率极低
以上就是c#三种方法调用网络服务接口的详细内容,更多关于c#调用网络服务接口的资料请关注我们其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。