WCF初接触实作之服务发布和使用

之前两篇随笔的示例中客户端直接引用契约类库,现实中可能因为开发团队或语言等原因,客户端不能直接引用契约类库,这就需要服务端公布自己的契约、客户端发现契约。

创新互联从2013年创立,先为象州等服务建站,象州等地企业,进行企业商务咨询服务。为象州企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

服务端:

服务端通过配置服务行为,以元数据的形式公布服务。可以使用配置文件也可以使用代码。

1、使用配置文件:

将之前的WCFDemo.Host.WithConfig项目的配置文件用WCF服务配置编辑器打开,新建服务行为配置:

这里就用默认的Name,实际项目中起个好听的名字吧

添加服务元数据:

设置元数据的HttpGetEnabled和HttpGetUrl:

选择服务,设置其BehaviorConfiguration为刚添加的服务行为:

保存后的配置文件:

 
 
 
 
  1.    
  2.    
  3.    
  4.    
  5.    
  6.    
  7.    
  8.    
  9.    
  10.    
  11.    
  12.    
  13.   
  14. bindingConfiguration=""contract="WCFDemo.Contracts.IDemoService"/>  
  15. bindingConfiguration=""contract="WCFDemo.Contracts.IDemoService"/>  
  16. bindingConfiguration=""contract="WCFDemo.Contracts.IDemoService"/> 
  17.    
  18.    
  19.    
  20.    

使用配置文件的方式,程序代码不需要任何修改。

2、代码方式:

在WCFDemo.Host.WithoutConfig项目的启动服务代码处添加服务行为的处理代码:

 
 
 
 
  1.   host = newServiceHost(typeof(DemoService));  
  2.   host.AddServiceEndpoint(typeof(IDemoService), newBasicHttpBinding(), "http://localhost:5678/DemoService");  
  3.   ServiceMetadataBehavior b = newServiceMetadataBehavior();  
  4.   b.HttpGetEnabled = true;  
  5.   b.HttpGetUrl = newUri("http://localhost:5678/DemoService/metadata");  
  6.   host.Description.Behaviors.Add(b);  
  7.   host.Opened += delegate{ label1.Text = "服务启动";};  
  8.   host.Open(); 

比原来多了4行添加服务行为的代码。

现在,运行两个宿主程序中的任意一个,点击启动按钮后,服务就启动并发布了,客户端可以发现契约并使用。

客户端:

客户端如何发现并使用服务,有2种方式:使用命令行svcutil生成文件、在IDE中添加服务引用。

1、使用svcutil

运行宿主并启动服务;运行Visual Studio 命令提示,键入svcutil http://localhost:5678/DemoService/metadata,将生成一个DemoService.cs文件和一个output.config文件(可以通过/out:指定输出目录);

在解决方案中添加一个Windows窗体应用程序WCFDemo.Client,为其添加引用System.ServiceModel和System.Runtime.Serialization;

将刚才生成的两个文件添加到项目,并将output.config改名为App.config;

在窗体上放置一个Button和DataGridView,为Button的Click编写代码如下:

 
 
 
 
  1.   DemoServiceClient c = newDemoServiceClient();  
  2.   dataGridView1.DataSource = c.GetMonitorData(); 

当然可以不用配置文件,newDemoServiceClient()中设置参数binding和remoteAddress。

svcutil常用的选项有/out:、/config:、/noconfig:等,详细用法这里就不介绍了。查看配置文件会发现里面内容很多,因为它自动为关键的绑定节点设置了默认值,这部分内容可以删除,所以很多时候不使用svcutil生成的配置文件。

2、添加服务引用

右击WCFDemo.Client,在添加服务引用对话框中输入地址http://localhost:5678/DemoService/metadata,点击“前往”按钮:

给命名空间起个好名(示例中就用默认名)后确定。

我们会发现,除了添加了服务引用,还修改了配置文件,如果原来没有配置文件,添加服务引用后会自动添加配置文件。

在窗体上再放置一个Button,为其Click编写代码如下:

 
 
 
 
  1.   ServiceReference1.DemoServiceClient c = newServiceReference1.DemoServiceClient();  
  2.   dataGridView1.DataSource = c.GetMonitorData(); 

和前一个一样,可以不用配置文件。

服务器有两种方案发布自己的元数据:基于HTTP-GET协议、使用专门的终结点。以上介绍的是前一种,下面介绍一下第二种。

1、使用配置文件

将之前的WCFDemo.Host.WithConfig项目的配置文件用WCF服务配置编辑器打开,新建服务终结点,并设置ABC:

现在WCFDemo.Host.WithConfig已提供两种发布服务的方式,启动服务后,客户端通过之前的地址http://localhost:5678/DemoService/metadata和刚才输入的地址http://localhost:5678/DemoService/MEX,都可以找到服务。

2、使用代码方式

在WCFDemo.Host.WithoutConfig项目的启动服务代码处增加一行添加终结点代码:

 
 
 
 
  1.   host = newServiceHost(typeof(DemoService));  
  2.   host.AddServiceEndpoint(typeof(IDemoService), newBasicHttpBinding(), "http://localhost:5678/DemoService");  
  3.   ServiceMetadataBehavior b = newServiceMetadataBehavior();  
  4.   b.HttpGetEnabled = true;  
  5.   b.HttpGetUrl = newUri("http://localhost:5678/DemoService/metadata");  
  6.   host.Description.Behaviors.Add(b);  
  7.   host.AddServiceEndpoint(typeof(IMetadataExchange), newCustomBinding(newHttpTransportBindingElement()), "http://localhost:5678/DemoService/MEX");  
  8.   host.Opened += delegate{ label1.Text = "服务启动";};  
  9.   host.Open(); 

效果同上。

原文链接:http://www.cnblogs.com/Higel/archive/2011/12/28/2303031.html

【编辑推荐】

  1. 5月最新超有趣的免费jQuery插件推荐
  2. 从零开始学习jQuery之管理jQuery包装集
  3. jQuery性能指标和调优
  4. 手把手教你jQuery jqPlot画图插件
  5. 从零开始学习jQuery之万能的选择器

网站名称:WCF初接触实作之服务发布和使用
URL地址:http://www.csdahua.cn/qtweb/news0/62950.html

网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网