c#编写webservice接口,C# webservice接口开发教程

c#编写webservice接口,C# webservice接口开发教程,c# 三种方法调用WebService接口

这篇文章主要介绍了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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • 设计一个简单的C#控制台应用程序,C#控制台程序,C# 创建控制台应用程序
  • 深入解析windows第8版,深入解析C#(第4版)
  • 数组代码,c# 数组操作,C# 数组实例介绍(图文)
  • 学会C#要多久,学会c#要多久,c#学习之30分钟学会XAML
  • 回溯法01背包问题c,回溯法求解01背包问题伪代码,C#使用回溯法解决背包问题实例分析
  • xml文件转义字符,xml转意字符,C# XML中的转义字符操作
  • winform 进度条控件,c# 进度条使用
  • winform 进度条控件,c# 进度条使用,C#使用winform实现进度条效果
  • winform backgroundworker,c# isbackground
  • winform backgroundworker,c# isbackground,C# BackgroundWorker用法详解
  • lua与c#交互,lua c#
  • lua与c#交互,lua c#,ToLua框架下C#与Lua代码的互调操作
  • linq c#,linq原理 c#
  • linq c#,linq原理 c#,c#中LINQ的基本用法实例
  • java decimal保留两位小数,sql中decimal函数保留2位小数,C#中decimal保留2位有效小数的实现方法
  • 留言与评论(共有 条评论)
       
    验证码: