分享

使?用?C?#?创?建?w?e?b?s?e?r?v?i?c?e?及?三?种?调?用?方?式

 goodwangLib 2014-09-13
使用C#创建webservice及三种调用方式


微软.NET战略的一个比较重要的部分就是webservice,利用webservice我们可以创建真正有效的分布式应用程序。 
下面,我们对webservice做一些说明。 
假设A是客户端,B是webservice服务端,用户通过http协议向服务器发送soap请求,webservice返回客户端XML格式的数据。 
现在我们看一看创建一个webservice的大致过程: 
服务端的webservice是必须要建的。中间的soap,xml我们不用去关心,在客户端这边,比较重要的是如何从webservice取得对象?答案是用的是proxy对象。客户端由代理对象(proxy)负责与webservice的通信。所以在客户端使用webservice,完全和使用一个本地对象是一样的。 


我们现在以一个简单的实例来说明。 
打开vs.net,新建工程(asp.net  web服务),在位置中键入http://localhost/webserver,其中webserver就是工程的名字。确定后,出现一个Service1.asmx.cx,双击,出现代码窗口, 
using  System; 
using  System.Collections; 
using  System.ComponentModel; 
using  System.Data; 
using  System.Diagnostics; 
using  System.Web; 
using  System.Web.Services; 


namespace  webserver 

///  <summary> 
///  Service1  的摘要说明。 
///  </summary> 
(1) 
public  class  Service1  :  System.Web.Services.WebService 

public  Service1() 

//CODEGEN:该调用是  ASP.NET  Web  服务设计器所必需的 
InitializeComponent(); 



#region  Component  Designer  generated  code 

/Web  服务设计器所必需的 
private  IContainer  components  =  null; 


///  <summary> 
///  设计器支持所需的方法  -  不要使用代码编辑器修改 
///  此方法的内容。 
///  </summary> 
private  void  InitializeComponent() 




///  <summary> 
///  清理所有正在使用的资源。 
///  </summary> 
protected  override  void  Dispose(  bool  disposing  ) 

if(disposing  &&  components  !=  null) 

components.Dispose(); 

base.Dispose(disposing); 



#endregion 


//  WEB  服务示例 
//  HelloWorld()  示例服务返回字符串  Hello  World 
//  若要生成,请取消注释下列行,然后保存并生成项目 
//  若要测试此  Web  服务,请按  F5  键 


// [WebMethod] 
// public  string  HelloWorld() 
// { 
// return  "Hello  World"; 
// } 
}


下面在(1)处加入 
[WebService(Namespace="http://localhost/webserver/")] 
这是因为soap是基于http协议上的,客户端无法知道webservice位于那个服务器上。在实际应用中,比如http://www.上放置这个webservice,则Namespace改为http://www./webserver. 


下面我们给这个webservice添加一个方法。 
// [WebMethod] 
// public  string  HelloWorld() 
// { 
// return  "Hello  World"; 
// } 
微软帮我们写好了一个,接着添加一个方法。方法名称叫show. 
[WebMethod] 
public  string  show(string  yourname) 

return  “http://www.”+”欢迎”+yourname; 

现在,就可以运行了,按F5,点击show,输入你的名字,然后点击invote 
看到了吧。 
<?xml  version="1.0"  encoding="utf-8"  ?>   
    <string  xmlns="http:///">http://www.欢迎yyg</string>   


成功了。打开bin目录,Vs.net已经将proxy做好了.webserver.dll. 


现在我们在不同的环境下测试: 
1. 打开vs.net,新建”windows应用程序”工程,命名为Client,增加按钮,文本框。 
现在要用到代理了,右键单击右边的reference(引用),选择”添加引用”,选择浏览,找到webserver目录下的bin目录下的webserver.dll 
再加入一个system.web.webservices的引用,在列表中有。 
在form1.cs里,加入 
using  System.Web.Services; 
using  webserver; 


然后在 
private  System.Windows.Forms.Button  button1; 
private  System.Windows.Forms.TextBox  textBox1; 

后面,插入 
private  webserver.service1  Client 
建立一个service1的实例。双击按钮,代码如下: 
private  void  button1_Click(object  sender,  System.EventArgs  e) 

Client  =new  Service1(); 
string  name; 
name=Client.show("龙卷风.NET"); 
textBox1.Text=name; 

按F5,运行工程,点击按钮,文本框中显示 
http://www.欢迎龙卷风.NET 




2. Asp.NET  web窗口的测试 
方法与上面的一模一样,添加引用,建立service1的实例 
在此不在细说。 
3.在VB中测试 
这个就要相对来说复杂一些 
首先在vb中建立一个”标准EXE”的工程。添加引用:Microsoft  Soap  Type  library。注意:如果没有安装Microsoft  Soap  Toolkit,是没有这个类型库的。 
可以在http://www.中下载。 
添加一个text 
Private  Sub  Form_Load() 
        Text1.Text  =  add() 
End  Sub 


Public  Function  Add()  As  String 
Dim  objSoapClient  As  New  SoapClient 
        objSoapClient.ClientProperty("ServerHTTPRequest")  =  True 
Call  objSoapClient.mssoapinit("http://localhost/webserver/service1.asmx?WSDL",  "Service1",  "Service1Soap") 
这句也可以 
objSoapClient.mssoapinit("http://localhost/webserver/service1.asmx?WSDL") 


        Add  =  objSoapClient.Show("龙卷风.NET") 
End  Function 

调试成功需要注意的: 
运行服务端webservice的程序,出现下面时 
支持下列操作。有关正式定义,请查看服务说明。 
点击服务说明,会得到完整的wsdl文件 
http://localhost/webserver/Service1.asmx?WSDL 
我们就要使用这个文件,其中包含了我们定义的方法等等。 


Mssoapinit(bstrWSDLFile  as  string,[bStrServiceName  as  string  ],[bStrport  as  string  ]  ,[bstrWSMLDile  as  string])的用法: 
其中第二个,第三个参数在wsdl文件中可以找到。也可以省略。 




后续:还有从COM中生成wsdl文件等等,我会陆续推出的。 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多