码迷,mamicode.com
首页 > 其他好文 > 详细

wcf系列(一)--- 寄宿方式

时间:2016-07-17 11:27:39      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:

 

一、自我寄宿(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();
            }

        }

以上是使用代码方式创建服务通道,也可以直接引用服务调用;

代码下载:点击下载

 

wcf系列(一)--- 寄宿方式

标签:

原文地址:http://www.cnblogs.com/tianboblog/p/5677546.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!