WCF WCF的宿主

by admin on 2019年11月8日

意气风发、WCF服务应用程序与WCF服务库

  笔者们在日常开支的长河中常用的花色项目有“WCF
服务应用程序”和“WCF服务库”。

  WCF服务应用程序,是叁个足以试行的程序,它有独立的历程,WCF服务类左券的概念,能够直接旁观运转的职能。此项目模板基于IIS托管的主次,如本种类的首先节所示。在支付基于IIS托管的WCF服务程序时,非常多见,自学的时候也得以使用那类别型,轻巧易懂。

  WCF服务库,能够认为是三个带有WCF服务以至左券定义的类库。不能平昔运营,你能够在其他类型里引用,在宿主里启用托管那些库,有一点形似于大家在Web项目中选取的类库。酌量WCF服务两全的时候,服务类的定义为单独的库,可以为别的品类利用。提升代码的复用性。

  当然你也能够改良这几个代码,比方把WCF服务程序里的类,移到三个独门的类库里,或是把类库里的类移到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.ServiceModel.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;
        }
    }
}

亚洲必赢手机,由于原先的左券为I瑟维斯,以往的为IUser,所以布署文件有两处要改革为:

<service name=”WCFLibrary.User”>

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

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

亚洲必赢手机 3

二、IIS宿主

  大家在率先节中,把WCF寄宿在IIS之上,在IIS中宿主贰个劳务的首要优点是在产生顾客端乞求时宿主进度会被电动运维,何况你能够注重IIS来治本宿主进程的生命周期。在开荒和选取的长河与Web
瑟维斯非常相仿。

、调控台应用程序宿主

  建构宿主

  (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)测量检验程序如下图所示表明成功(注意:必须求先运维大家的宿主程序才行,假如宿主未有张开的话会报错:出于目的计算机积极谢绝,不能连接。)。

亚洲必赢手机 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激活卡塔尔国:

亚洲必赢手机 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

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图