WCF创建学习二:使用XML配置终结点发布服务端
【前言】这篇博客仍然是关于WCF的创建学习。上篇博客中使用的是在服务端的HOST中写入终结点的配置,这次采用配置
文件的方式进一步进行解耦。在配置文件中运用到了<system.serviceModel>的配置属性。它是专门为分布式服务的
一种配置方式。在它的<service>、<endpoint>、<behaviors>这三个属性中发布服务端的实现地址、发布地址、绑定
方式、服务端对外接口。
【实现思路】在项目中新建项目,添加服务的类库[WCFServiceDemo],类库中添加对外的总的接口类[IHelloService]。
在项目中新建项目,添加web窗体[WinformHello]和类[HelloService](用于实现接口)。
在WinformHello 中添加XML的APP.Config,用于添加配置信息。
将web窗体运行,激活,开启服务后,就可以显示发布的服务信息了。
代码:
WCFServiceDemo:IHelloService: 需要引用 System.ServiceModel
<pre name="code" class="html"><span style="font-family:SimSun;font-size:18px;">using System.ServiceModel; namespace WCFServiceDemo { //声明服务契约 [ServiceContract] public interface IHelloService { //在服务中添加方法或者提供的服务 [OperationContract] DateTime getDateTime(); [OperationContract] String getUserInfo(); } }</span>
WinformHello :app.config:
<span style="font-family:SimSun;font-size:18px;"><?xml version="1.0" encoding="utf-8" ?> <configuration> <system.serviceModel> <services> <!--name属性表示实现服务的命名空间.类;--> <service name="WinformHello.HelloService" behaviorConfiguration="TestBeahavior" > <host> <baseAddresses> <!--手动添加发布地址,本地发布--> <add baseAddress = "http://localhost:8080/Hello"/> </baseAddresses> </host> <!--表名绑定方式,和服务端被实现的总接口(服务)--> <endpoint address="" binding="basicHttpBinding" contract="WCFServiceDemo.IHelloService"></endpoint> </service> </services> <behaviors> <serviceBehaviors> <behavior name="TestBeahavior"> <!--配置信息可见--> <serviceMetadata httpGetEnabled="true"/> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel> </configuration></span>
HelloService:需要引入需要被实现的接口的命名空间,并实现。
<span style="font-family:SimSun;font-size:18px;">using WCFServiceDemo; namespace WinformHello { public class HelloService : WCFServiceDemo.IHelloService { public DateTime getDateTime() { return DateTime.Now; } public string getUserInfo() { return "猴年过完是鸡年,鸡年过完是狗年!"; } } }</span>
宿主窗体:
对应代码:
<span style="font-family:SimSun;font-size:18px;"> ServiceHost host = null; private void button1_Click(object sender,EventArgs e) { host = new ServiceHost(typeof(WinformHello.HelloService)); host.Open(); label1.Text = "服务已经启动"; } </span>
实现效果:
运行窗体,启动服务:
查看发布的服务信息URL:
在App.confg中直接访问地址就行。
查看发布的服务信息:
<system.serviceModel>:配置信息:
备注:
配置节。本节及其内容定义特定服务的服务协定、行为和终结点。
更改 ServiceContractAttribute 上的 ConfigurationName 属性以重写 CLR 类型要求。
文件的范围(即,同一文件或父文件)中定义的服务行为。
使用的所有绑定都必须在该文件的范围内定义。
定。 bindingConfiguration 属性定义使用绑定节中的哪个已配置绑定。绑定节可以定义若干个已配置的绑定。
总结:这个Demo的实现没有使用WCF的封装好的框架进行搭建,而是采用日常的VS项目进行,这样可以体会到如何创建
的分布式服务的精髓,VS自带的WCF框架其实也就是把这些封装了一下,从根上了解它的创建过程,有利于我们在使
用封装框架时游刃有余。
在配置文件中声明了要被实现的接口和实现接口的类。对<system.serviceModel>的学习和理解是关键点。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |