WCF之Windows宿主

WCF之Windows宿主(可安装成服务自动并启动)

 

  • 创建解决方案WCFServiceDemo
  • 创建WCF服务库(类库或WCF服务库)WCFService  ,添加引用System.ServiceModel、System.Runtime.Serialization                                                    

 

图1:WCF之Windows宿主图2: WCF之Windows宿主

 

  • 创建实体模型Book

 

WCF之Windows宿主 Book

 

  • 创建实现类BookService

 

WCF之Windows宿主 BookService

 

  • 创建接口IBookService(接口必须加上ServiceContract特性,方法必须加上OperationContract特性)

 

WCF之Windows宿主 IBookService

 

  • 如图:

 

 WCF之Windows宿主

 

 

 

 

 

 

 

  • 创建Windows服务宿主WindowsServiceHost ,添加引用System.ServiceModel、System.Runtime.Serialization            

 

图3:WCF之Windows宿主图4:WCF之Windows宿主

 

 

 

  • 修改Service1的属性

 

    在Service1的设计界面中右击,选择“属性”,把其中的(Name)和ServiceName都改为BookServiceHost

 

  编写代码:

 

WCF之Windows宿主 BookServiceHost

 

  • 编辑WCF配置(WCF工具配置

 

图5:WCF之Windows宿主

 

  • 新增服务,弹出界面,由于该App.Config文件是我们新添加的一个配置文件,所以左边的服务项中是空的。点击右边的“新建服务...”弹出“新建服务元素向导”窗口,单击“浏览”按钮,选择Bin/Debug目录下Services.dll程序集中的Services.BookService服务。

 

图6:WCF之Windows宿主图7:WCF之Windows宿主

 

  • 添加终结点:终结点(endpoint)分别有:TCP、HTTP、命名管道、MSMQ、对等、元数据

 

图8:WCF之Windows宿主图9:WCF之Windows宿主

 

图10:WCF之Windows宿主图11:WCF之Windows宿主

 

图12:WCF之Windows宿主图13WCF之Windows宿主

 

图14:WCF之Windows宿主图15: WCF之Windows宿主

 

图16:WCF之Windows宿主图17:WCF之Windows宿主

 

  • 依次添加其他的通信模式的终结点(上面图示为:http通信模式基本Web服务操作性)模式选择见下图

 

图18:WCF之Windows宿主图19:WCF之Windows宿主

 

  • 下面依次演示添加其他通信模式的终结点

Http(高级Web服务互操作性)

图20:WCF之Windows宿主 图21: WCF之Windows宿主图22:WCF之Windows宿主

到目前为止我们配置好了两个http通道下的两个终结点,但这两个终结点的地址我们都使用的是相对地址,它们是相对于当前ServiceHost地址,所以我们还需要配置当前ServiceHost的地址.

  • 配置ServiceHost地址:

图23:WCF之Windows宿主

这样我们两个终结点算是配置完成了。

“自运行WCF服务”与“在IIS布运行WCF服务”不一样的是,“自运行WCF服务"除了可以使用Http方式发布WCF服务,可以使用TCP、命名管道和微软消息队列进行信息传输。
下面我们再配置两个终结点,一个是使用TCP通信模式,另一个使用命名管道通信模式。

TCP:

图24:WCF之Windows宿主图25:WCF之Windows宿主

命名管道:

图26:WCF之Windows宿主图27:WCF之Windows宿主

到此为至,我们已经为该WCF服务建立了四个数据传输的终结点

下面我们为该ServiceHost程序配置“元数据终结点”,以向客户端发送服务元数据信息

  • 添加服务行为。在左侧配置中选择“高级”-“服务行为”,再点击右侧的“新建服务行为分配”,点击“添加”弹出“添加行为元素扩展部份”窗口,选择“serviceMetaData”

图28:WCF之Windows宿主图29:WCF之Windows宿主

  • 为服务配置刚刚新建的行为。

图30:WCF之Windows宿主

  • 配置元数据终结点

图31:WCF之Windows宿主图32:WCF之Windows宿主

图34:WCF之Windows宿主图33:WCF之Windows宿主

图35:WCF之Windows宿主图36:WCF之Windows宿主

图37:WCF之Windows宿主图38:WCF之Windows宿主

 

最终页面:

 

WCF之Windows宿主

 

到目前为止我们已经将Window服务宿主配置完毕,现在保存,关闭WCF配置工具,并打开App.Config

 

WCF之Windows宿主
WCF之Windows宿主
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="NewBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service behaviorConfiguration="NewBehavior" name="WCFService.BookService">
        <clear />
        <endpoint address="basic" binding="basicHttpBinding" contract="WCFService.IBookService"
          listenUriMode="Explicit">
          <identity>
            <certificateReference storeName="My" storeLocation="LocalMachine"
                x509FindType="FindBySubjectDistinguishedName" />
          </identity>
        </endpoint>
        <endpoint address="ws" binding="ws2007HttpBinding" contract="WCFService.IBookService"
          listenUriMode="Explicit">
          <identity>
            <certificateReference storeName="My" storeLocation="LocalMachine"
                x509FindType="FindBySubjectDistinguishedName" />
          </identity>
        </endpoint>
        <endpoint address="net.tcp://localhost:8082/BookService" binding="netTcpBinding"
          contract="WCFService.IBookService" listenUriMode="Explicit">
          <identity>
            <certificateReference storeName="My" storeLocation="LocalMachine"
                x509FindType="FindBySubjectDistinguishedName" />
          </identity>
        </endpoint>
        <endpoint address="net.pipe://localhost/BookService" binding="netNamedPipeBinding"
          contract="WCFService.IBookService" listenUriMode="Explicit">
           <identity>
                        <certificateReference storeName="My" storeLocation="LocalMachine"
                            x509FindType="FindBySubjectDistinguishedName" />
                    </identity>
        </endpoint>
        <endpoint address="mex" binding="basicHttpBinding" bindingConfiguration=""
          contract="IMetadataExchange" />
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8081/service" />
          </baseAddresses>
        </host>
      </service>
    </services>
  </system.serviceModel>
</configuration>
WCF之Windows宿主

 然后把下面代码删掉:

<identity>
<certificateReference storeName="My" storeLocation="LocalMachine"
x509FindType="FindBySubjectDistinguishedName" />
</identity>

 

 

最终的App.config

 

WCF之Windows宿主
WCF之Windows宿主
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="NewBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service behaviorConfiguration="NewBehavior" name="WCFService.BookService">
        <clear />
        <endpoint address="basic" binding="basicHttpBinding" contract="WCFService.IBookService"
          listenUriMode="Explicit">
        </endpoint>
        <endpoint address="ws" binding="ws2007HttpBinding" contract="WCFService.IBookService"
          listenUriMode="Explicit">
        </endpoint>
        <endpoint address="net.tcp://localhost:8082/BookService" binding="netTcpBinding"
          contract="WCFService.IBookService" listenUriMode="Explicit">
        </endpoint>
        <endpoint address="net.pipe://localhost/BookService" binding="netNamedPipeBinding"
          contract="WCFService.IBookService" listenUriMode="Explicit">
        </endpoint>
        <endpoint address="mex" binding="basicHttpBinding" bindingConfiguration=""
          contract="IMetadataExchange" />
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8081/service" />
          </baseAddresses>
        </host>
      </service>
    </services>
  </system.serviceModel>
</configuration>
WCF之Windows宿主

 

以上所写不仅适用与Windows宿主,同时适用IIS、控制台,因此后面关于IIS以及控制台宿主的发布不再重复以上配置

 

  • 为服务添加安装程序

在Service1设计界面中右击,选择“添加安装程序”

图40:WCF之Windows宿主图41:WCF之Windows宿主

图42:WCF之Windows宿主图43(此图网络引用):WCF之Windows宿主

  • 开始安装

进入vs2012 开发命令提示,进入项目对应的盘符并进入exe所在文件夹,执行命令 :installutil WindowsServiceHost.exe

图44:WCF之Windows宿主

  • 启动BookServiceHost服务

图45:WCF之Windows宿主

图46:

WCF之Windows宿主

在VS2008命令窗口中输入:wcftestclient http://localhost:8081/Service 出现下面的界面

47:WCF之Windows宿主

 

Demo下载

WCF之Windows宿主

上一篇:查看window用户登录日志


下一篇:手机与电脑无线传输文件(利用文件大师)