WCF WCF的宿主

生机勃勃、WCF服务应用程序与WCF服务库

  笔者们在经常付出的历程中常用的项目项目有“WCF
服务应用程序”和“WCF服务库”。

  WCF服务应用程序,是叁个足以实行的次序,它有独立的进度,WCF服务类协议的定义,能够间接观望运维的信守。此项目模板基于IIS托管的顺序,如本连串的率先节所示。在付出基于IIS托管的WCF服务程序时,超多见,自学的时候也足以运用那类别型,轻松易懂。

  WCF服务库,能够认为是八个包涵WCF服务以至公约定义的类库。不能够直接运转,你能够在其余品类里引用,在宿主里启用托管这么些库,有一些雷同于大家在Web项目中选取的类库。思量WCF服务布置的时候,服务类的定义为单独的库,可感到此外项目利用。提升代码的复用性。

  当然你也得以改正那几个代码,比如把WCF服务程序里的类,移到一个独立的类Curry,或是把类Curry的类移到WCF服务程序中。

二、概述

  通过前边的牵线我们驾驭,WCF在运转时必寄宿在“宿主程序”之上,WCF本人不可以知道独立运营(各个WCF服务必须宿主在三个Windows进度中卡塔尔。.net
提供了多样宿主供WCF运维,WCF依然特别灵活的。

澳门新葡亰网址 1

  WCF的宿主能够是 Windows 服务、COM+应用程序、WAS(Windows Activation
Services,Windows进度激活服务)或IIS、Windows应用程序,或简捷的调整台应用程序及任何.net程序。

  那节的演示大家重新建设构造WCF类库项目为例做示范,名叫:WCFLibrary,并剔除自动生成的几个文件(IService1.cs、Service1.cs)。如下图所示:

澳门新葡亰网址 2

  鼠标右键查看项目性质。大家开掘,其实“WCF类库项目”与大家常常建构的“类库项目”都以类库,只可是多了WCF的类库项目在新建时多了多少个dll的引用(System.瑟维斯Model.dll、System.Runtime.Serialization.dll)和二个自动生成的配备文件(该配置文件只用于调节和测验时使用,在WCF寄宿将来会利用宿主的安排文件与其他应用程序通讯)。那更验证了大家在做分式程序支付的时候与我们平昔开销的应用程序没有多大的界别,只要我们在应用程序间通信时“相符WCF的预订”就可以。

  服务端我们还和率先个学科同样(IUser接口与User实现),只建立叁个办法做为我们调用的身体力行代码如下:

//添加引用
using System.ServiceModel;

namespace WCFLibrary
{
    [ServiceContract]
    interface IUser
    {
        [OperationContract]
        string ShowName(string name);
    }
}

namespace WCFLibrary
{
    class User : IUser
    {
        public string ShowName(string name)
        {
            string wcfName = string.Format("WCF服务,显示姓名:{0}", name);
            return wcfName;
        }
    }
}

出于原先的公约为IService,将来的为IUser,所以布署文件有两处要改善为:

<service name=”WCFLibrary.User”>

<endpoint address=”” binding=”wsHttpBinding”
contract=”WCFLibrary.IUser”>

点击“F5“运营效果如下图所示表明成功:

澳门新葡亰网址 3

二、IIS宿主

  大家在率先节中,把WCF寄宿在IIS之上,在IIS中宿主二个劳动的机要优点是在发生顾客端诉求时宿主进度会被活动运维,并且你可以依附IIS来治本宿主进度的生命周期。在支付和应用的长河与Web
Service非常相符。

、调整台应用程序宿主

  创建宿主

  (1)在应用方案下新建调节台出口项目 WCFHost_Console。

  (2)添加 System.ServiceModel.dll 的引用。

  (3)增加 WCF 服务类库(WCFLibrary)的种类援引。

  (4)创造宿主程序,代码如下:

using System;
using WCFLibrary;
using System.ServiceModel;
using System.ServiceModel.Description;

namespace WCFHost_Console
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建宿主的基地址
            Uri baseAddress = new Uri("http://localhost:8080/User");
            //创建宿主
            using (ServiceHost host = new ServiceHost(typeof(User), baseAddress))
            {
                //向宿主中添加终结点
                host.AddServiceEndpoint(typeof(IUser), new WSHttpBinding(), "");
                //将HttpGetEnabled属性设置为true
                ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
                smb.HttpGetEnabled = true;
                //将行为添加到Behaviors中
                host.Description.Behaviors.Add(smb);
                //打开宿主
                host.Open();
                Console.WriteLine("WCF中的HTTP监听已启动....");
                Console.ReadLine();
                host.Close();
            }
        }
    }
}

(5)运维宿主程序[在顾客端调用时要先运转宿主程序],如下图所示:

澳门新葡亰网址 4

  表明宿主创建成功。在上例中用到”ServiceHost”类,这里只是不难的使用,具体请查看“MSDN
ServiceHost”

  树立客商端

  (1)重新创建技术方案–>Web应用程序项目。

  (2)增添对服务的引用(在引用上右键–>输入我们定义的劳动宿主的集散地址(此处为:http://localhost:8080/User)–&gt;前往–&gt;确定),具体请看第一节。

澳门新葡亰网址 5

  (3)测量试验程序如下图所示表达成功(注意:必须求先运维我们的宿主程序才行,要是宿主未有展开的话会报错:由于指标Computer积极拒却,不可能连接。)。

澳门新葡亰网址 6

  在此个示例中大家把Endpoint中的ABC,营地址,Behaviors等都一向写在了代码里,但实际上利用进程中都以去正视配置文件,为了相比较表明我们下面的例子中会使用安插文件。

**四、Windows应用程序宿主 **

  创设宿主

  (1)在解决方案下新建Windows窗体应用程序项目 WCFHost_Form。

  (2)添加 System.ServiceModel.dll 的引用。

  (3)增添 WCF 服务类库(WCFLibrary)的档案的次序援用。

  (4)增多应用程序配置文件App.config。

  (5)创立宿主程序MainForm窗体,并改良App.config,代码如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <services>
      <service name="WCFLibrary.User">
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8081/User"/>
          </baseAddresses>
        </host>
        <endpoint address="" binding="wsHttpBinding" contract="WCFLibrary.IUser"></endpoint>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="True"/>
          <serviceDebug includeExceptionDetailInFaults="False"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>


using System;
using WCFLibrary;
using System.ServiceModel;
using System.Windows.Forms;
using System.Configuration;

namespace WCFHost_Form
{
    public partial class MainForm : Form
    {
        ServiceHost host;

        public MainForm()
        {
            InitializeComponent();
        }

        //应用程序加载
        private void MainForm_Load(object sender, EventArgs e)
        {
            host = new ServiceHost(typeof(User));
            //打开宿主
            host.Open();
            this.lblState.Text = "WCF中的HTTP监听已启动....";
        }

        //应用程序关闭
        private void MainForm_FormClosed(object sender, FormClosedEventArgs e)
        {
            host.Close();
        }
    }
}

运路程序如下图所示:

澳门新葡亰网址 7

  创立顾客端

  同上面的Console程序近似,这里要援用的地址为:<add
baseAddress=”http://localhost:8081/User"/&gt;

  在这里个例子中与Console应用程序不一致的是,大家在Console配置是直接写在程序中的,而在本例中大家选择的是安顿文件,差异在于大器晚成旦写在安排文件中等射程序运维时一向到安顿文件里抽取相关的布署节去创设ServiceHost类。

五、WAS宿主

  Windows 进度激活服务 (WAS)
概述
.aspx)  

  IIS7允许通过HTTP外的合计举行激活和互联网通讯。此条件适合开拓可经过WCF帮衬的别的网络合同(蕴涵http、net.tcp、net.pipe、net.msmq卡塔 尔(阿拉伯语:قطر‎举办通讯的WCF服务。布署轻便、管理有助于,那个网络合同在配备时可像Http同样,直接丢到IIS7上就可以,大家在底下的例证中以net.tcp为协商为例。IIS7以下的版本只好辅助Http的通讯。

  1、确定保障已安装IIS7的激活零件

  在应用WAS宿主时,必需确认保证IIS7的激活构件安装好。张开“调控面板”–>“张开或关闭Windows成效”–>“效用”,笔者的机械桃月经安装过,如下图所示(WCF激活与非WCF激活卡塔 尔(英语:State of Qatar):

澳门新葡亰网址 8

  若无设置,点击“加多新功能”,然后勾选“WCF激活”,如下图所示:

澳门新葡亰网址 9

  安装成功后大家开辟IIS,点击“暗中同意网址(任一个网址就能够)”–>“绑定”–>“加多”,在项目中会现身非IIS援救的此外系列。如下图所示

澳门新葡亰网址 10

  表明安装成功。

  2、增加net.tcp的网址绑定

  在上海体育场所中,大家接收项目net.tcp,然后在绑定消息中填入“808:*”,点击明确。

  3、开通net.tcp的协议澳门新葡亰网址, 

  在设置成功还要在钦点的网址上绑定了net.tcp以往,大家还要开通.net.tcp协议,点击大家要配置WCF的网址,在IIS处理器的操作成效区有生龙活虎项“高等设置”点击后现身如下图所示高端配置的窗体

澳门新葡亰网址 11

  在启用的情商业中学增添net.tcp左券(原本只对http公约扶助,今后把tcp公约追加上去),中间用逗号隔开开,如上海体育地方所示。

  注意:这多少个步骤三个也无法少,不然会产出:“找不到具有绑定
NetTcpBinding 的终结点的与方案 net.tcp 相配的基址。注册的基址方案是
[http]
”的错误新闻。

   4、创建服务程序

  (1)在缓解方案下新建WCF服务应用程序项目 WCFHost_WAS。

  (2)构建IUser与User,代码同例二同等。

  (3)矫正配置文件代码如下:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.serviceModel>
    <bindings>
      <netTcpBinding>
        <binding name="netTcpBindConfig">
          <security mode="None">
            <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
            <message clientCredentialType="Windows" />
          </security>
        </binding>
      </netTcpBinding>
    </bindings>
    <services>
      <service behaviorConfiguration="MyBehavior" name="WCFHost_WAS.User">
        <endpoint address="" binding="netTcpBinding" contract="WCFHost_WAS.IUser" bindingConfiguration="netTcpBindConfig"></endpoint>
        <!--元数据交换的终结点-->
        <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" ></endpoint>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="MyBehavior" >
          <serviceMetadata/>
          <serviceDebug includeExceptionDetailInFaults="true" />
          <dataContractSerializer maxItemsInObjectGraph="6553600"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

</configuration>

(5)铺排服务

  像别的的Web应用程序近似,把相关的文件丢到服务器端钦定目录就能够。

  鼠标右键浏览User.svc,如现如下所示:

澳门新葡亰网址 12

  表达布置成功,如上所示的劳务地方为:net.tcp://服务器名/User.svc/mex

  (6)建设构造顾客端

  创制客商端也与其它的生机勃勃致,如下图所示:

澳门新葡亰网址 13

  大家那个时候看客商端的安插文件:

<client>
      <endpoint address="http://localhost:8080/User" binding="wsHttpBinding"
        contract="WCFHost_Console.IUser" />
      <endpoint address="http://localhost:8081/User" binding="wsHttpBinding"
        bindingConfiguration="WSHttpBinding_IUser" contract="WCFHost_Form.IUser"
        name="WSHttpBinding_IUser">
        <identity>
          <userPrincipalName value="WIN-EOUTAA4CP4O\Administrator" />
        </identity>
      </endpoint>
      <endpoint address="net.tcp://win-eoutaa4cp4o/User.svc" binding="netTcpBinding"
        bindingConfiguration="NetTcpBinding_IUser" contract="WCFHost_WAS.IUser"
        name="NetTcpBinding_IUser" />
    </client>

咱俩在四个Web应用程序中调用了二种区别宿主的劳动。 

七、总结

  通过地方的多少个例证,大家兑现了调整台宿主、Form宿主、WAS宿主(基于TCP合同)的落实。在实际的支出进程中,有的时候候大家还恐怕会用到基于Windows服务的宿主,但大繁多份都接收IIS做宿主,方便、连忙。

 

初稿链接:http://www.cnblogs.com/iamlilinfeng/archive/2012/10/01/2706353.html

Leave a Comment.