WCF创建宿主程序

上篇说的:服务契约、不知道大家看过没,这篇接着那篇讲废话

宿主:

当我们写好了一个服务之后,要有地方放它,才能让客户端调用的时候找到它,这就是宿主,它是一种媒介,是一个位置。WCF在运行时必寄宿在“宿主程序”之上,WCF本身不能够独自运行(每个WCF服务必须宿主在一个Windows进程中)。而我们最熟悉的发布到IIS服务器上,其实IIS也是一种宿主。点击打开链接

ServiceHos类型:

当IIS或WAS作为宿主程序时,IIS和WAS会自动创建serviceHost类型

手动创建的基本语法:

public  ServiceHost(type serviceType,params Uri[] baseAddresses);//type服务契约类型,上面继承的接口类,baseAddress基地址

宿主步骤

一、控制台应用程序:引用servicemodel、还有用来创建绑定的channels

二、创建类:MyHolleHost

Endpoint:

具体代码会设计到;当我们寄宿WCF服务的时候,我们须定义一个或是多个终结点,然后Serivce端通过监听这些终结点来处理Client发来的请求

A、B、C即是Endpoint 的组成部分,它是服务器间通信调用的入口。

A(Address)服务在哪里?

          通过一个URI唯一地址标识,可以找到要调用的WCF服务。


B(Binding)Howto communicate with service

           Binding实现在ClientService通信的所有底层细节。

如:我们在客户端与服务端传输的时候采用的是什么样的编码,XML?Text?二进制?

采用哪种传输协议进行传输,TCP?Http?

以及采用什么样的机制解决安全问题,SSL?加密?…

C(Contract)What functionalities  do the Service provide

 暴露某个WCFService所提供的所有有效的方法。

     Contract实际上是把每个方法的转化成为相对应的消息。

还记得当年博客河畔那副美图吗?忘了没有关系、后面再给你一次机会:看去、不谢

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ServiceModel;
using System.ServiceModel.Channels;//用于绑定

namespace HelloServiceHost
{
    class Program
    {
        static void Main(string[] args)
        {
            using (MyHelloHost Host = new MyHelloHost())
            {
                //调用方法,打开服务
                Host.open();
                Console.Read();
            }
        }
    }
    public class MyHelloHost : IDisposable 
    {
        // 定义一个服务对象  ,供下方使用     
        private ServiceHost _myhost;
        //封装对象:方便访问
        public ServiceHost Myhost
        {
            //返回接口
            get { return _myhost; }   
        }
        //基地址:包含基本的传输协议 http/net.pipe等    客户端有用
        public const string BaseAddress = "net.pipe://localhost";
        //可选地址,选择性定义     客户端使用
        public const string HelloServiceAddress = "Hello";
        //服务契约实现类型: 引用*项目中的实现类:HelloService  需要添加对应项目的引用
        public static readonly Type ServiceType=typeof(SayHelloService.HelloService);
        //服务契约接口:实现接口:IHelloService 一 一对应
        public static readonly Type ContractType = typeof(SayHelloService.IHelloService);
        //创建绑定 需要一个地址 
        public static readonly Binding hellobinding = new NetNamedPipeBinding();
        //创建一个服务对象  _myhost在上面定义了
        protected void CreateHelloServiceHost() 
        {
            //创建服务对象 serviceType服务契约定义的类型,baseAddresses一组长度可变的基地址数组 已经定义   
            _myhost=new ServiceHost(ServiceType,new Uri[]{new Uri(BaseAddress)});
            //终结点Endpoint  服务的契约类型:接口类型,绑定,可选地址
            _myhost.AddServiceEndpoint(ContractType, hellobinding,HelloServiceAddress);
        }
        #region open 打开服务方法 马金兴 2017年2月15日21:50:56
        /// <summary>
        /// open 打开服务方法
        /// </summary>
        public void open()
        {
            Console.WriteLine("开始启动服务……");
            _myhost.Open();
            Console.WriteLine("服务已经启动……");
        }
        #endregion

        #region MyHelloHost 构造方法,创建服务 马金兴 2017年2月15日21:51:51
        /// <summary>
        /// 构造方法,创建服务
        /// </summary>
        public MyHelloHost()
        {
            CreateHelloServiceHost();
        }
        #endregion

        #region  Dispose 销毁 马金兴 2017年2月15日21:52:41
        /// <summary>
        /// 销毁
        /// </summary>
        public void Dispose()
        {
            if (_myhost != null)
            {
                (_myhost as IDisposable).Dispose();
            }
        }
        #endregion
    }
}

后记:

WCF三种宿主方式 :

一、IIS宿主

优点是在发生客户端请求时宿主进程会被自动启动,所以说大多数人还是经常用IIS来发布服务的。并且可依靠IIS来管理宿主进程的生命周期;必须采用Http作为通信协议来绑定。

二、手写代码宿主

就是这篇了,须根据绑定协议来编写相应的代码。服务的地址需要根据绑定所采用的通信协议来最终确立。所以绑定、协议都在宿主程序中去定义。

首先要定义一个服务对象,然后定义好终结点需要的三要素添加终结点,最后开启服务。ServiceHost对象会自动有一个销毁服务的方法,为的是当关闭这个服务的时候就销毁它。

三、写配置文件

这个会在后面写,相对而言代码量少很多

WCF的宿主还可以是 Windows服务、COM+应用程序、WAS(Windows ActivationServices,Windows进程激活服务)IIS、Windows应用程序,或简单的控制台应用程序及任何.net程序。


桥梁,定义服务契约、提供客户端访问基础

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 60
    评论
评论 60
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值