标签:
一、自我寄宿(self-hosting)
1、wcf采用基于终结点(Endpoint)的通信手段;终结点由:地址(Address)+绑定(Binding)+契约(Contract)组成; Enpoint=ABC.

2、终结点的添加和服务行为的定义
(1)通过代码的方式
static void Main(string[] args) { using (ServiceHost host = new ServiceHost(typeof(CalculatorService))) { host.AddServiceEndpoint(typeof(ICalculator), new WSHttpBinding(), "http://127.0.0.1:3721/calculatorservice"); if (host.Description.Behaviors.Find<ServiceMetadataBehavior>() == null) { ServiceMetadataBehavior behavior = new ServiceMetadataBehavior(); behavior.HttpGetEnabled = true; behavior.HttpGetUrl = new Uri("http://127.0.0.1:3721/calculatorservice/metadata"); host.Description.Behaviors.Add(behavior); } host.Opened += delegate { Console.WriteLine("服务已经启动,按任意键终止!"); }; host.Open(); Console.Read(); } }
(2)wcf服务配置编辑器
工具-->wcf服务配置编辑器,配置完成会自动生成配置文件内容;

<?xml version="1.0" encoding="utf-8" ?> <configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /> </startup> <system.serviceModel> <bindings> <wsHttpBinding> <binding name="WSHttpBinding_CalculatorService" /> </wsHttpBinding> </bindings> <client> <endpoint address="http://127.0.0.1:3721/calculatorservice" binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_CalculatorService" contract="CalculatorService.CalculatorService" name="WSHttpBinding_CalculatorService"> <identity> <userPrincipalName value="" /> </identity> </endpoint> </client> </system.serviceModel> </configuration>
调用:
static void Main(string[] args) { using (ServiceHost host = new ServiceHost(typeof(CalculatorService))) { host.Opened += delegate { Console.WriteLine("服务已经启动,按任意键终止!"); }; host.Open(); Console.Read(); } }
也可以使用ChannelFactory<ICalculator>创建代理:
static void Main(string[] args) { using (ChannelFactory<ICalculator> channelFactory = new ChannelFactory<ICalculator>(new WSHttpBinding(), "http://127.0.0.1:3721/calculatorservice")) { ICalculator proxy = channelFactory.CreateChannel(); Console.WriteLine(proxy.Multiply(1, 2)); Console.ReadKey(); } }
二、iis寄宿
1、新建空的web应用程序
2、新建Service.svc文件:新建项目-->Visual C#-->直接在名称框输入:Service.svc保存即可
3、打开Service.svc,内容修改为:<%@ServiceHost Service="Service.CalculatorService" %>作用就是映射到服务
4、定义的接口拷贝到当前应用程序下,修改web.config;由于服务端采用不加密的方式传输,所以客户端也相应的配置如此
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="bindingConfiguration1">
<security mode="None">
<transport clientCredentialType="None"/>
<message clientCredentialType="None"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="metadataBehaviors" >
<!-- 将下列元素添加到服务行为配置中。 -->
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<!-- 注意: 服务名称必须与服务实现的配置名称相匹配。 -->
<service name="Service.CalculatorService" behaviorConfiguration="metadataBehaviors" >
<!-- 添加下列终结点。 -->
<!-- 注意: 服务必须有一个 http 基址以便添加此终结点。 -->
<endpoint contract="ServiceI.Interface.ICalculator" binding="wsHttpBinding" bindingConfiguration="bindingConfiguration1"/>
</service>
</services>
</system.serviceModel>
5、发布之后,生成相关dll和Service.svc文件,在iis中像发布网站一样寄宿服务;在浏览器输入http:*****/Service.sv就可以访问了
static void Main(string[] args) { WSHttpBinding WShb = new WSHttpBinding();//使用协议与服务端相同 WShb.Security.Mode = SecurityMode.None; //安全级别 EndpointAddress epo = new EndpointAddress("http://*********/Service.svc");//指定WCF服务地址 using (ChannelFactory<ICalculator> channelFactory = new ChannelFactory<ICalculator>(WShb, epo)) { ICalculator proxy = channelFactory.CreateChannel(); Console.WriteLine(proxy.Multiply(1, 2)); Console.ReadKey(); } }
以上是使用代码方式创建服务通道,也可以直接引用服务调用;
代码下载:点击下载
标签:
原文地址:http://www.cnblogs.com/tianboblog/p/5677546.html