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>的学习和理解是关键点。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
