丰盛宿主为控制台应用程序的WCF服务

1.创制WCF服务库:WcfServiceLibrary,依照活动成立的代码修改自身的WCF
服务协议、操作家组织议、数据协议。本次先完成简单的WCF最基本的通讯格局:请求-》应答格局。

lovebet爱博体育,接下去继续WCF(网上的法门)(实例)

概念服务、操作家协会议接口:

一 、无废话WCF入门教程一与无废话WCF入门教程二(http://www.cnblogs.com/iamlilinfeng/archive/2012/09/25/2700049.html) 提供的例证已经达成;

[ServiceContract]
public interface IUser
{
[OperationContract(IsOneWay = true)]
void SetData(UserInfo _UserInfo);

2、WCF的宿主:

[OperationContract]
List<UserInfo> GetData();

http://www.cnblogs.com/iamlilinfeng/archive/2012/10/01/2706353.html)

[OperationContract]
int GetCount();
}

壹 、WCF服务应用程序与WCF服务库

兑现协议接口:

  我们在经常耗费的长河中常用的花色体系有“WCF
服务应用程序”和“WCF服务库”。

 

  WCF服务应用程序,是二个得以推行的顺序,它有单独的进度,WCF服务类契约的概念,能够一直观察运营的遵循。此项目模板基于IIS托管的程序,如本种类的首先节所示。

// 注意:
使用“重构”菜单上的“重命名”命令,能够而且改变代码和陈设文件中的类名“Service1”。
public class User : IUser
{
IUserCallBack callback = null;
/// <summary>
/// 构造函数
/// </summary>
public User()
{
Timer time = new Timer(10000);
time.Enabled = true;
time.Elapsed += time_Elapsed;

   
 在付出基于IIS托管的WCF服务程序时,相比多见,自学的时候也足以应用那种类型,不难易懂。

callback =
OperationContext.Current.GetCallbackChannel<IUserCallBack>();
}

  WCF服务库,能够认为是一个含有WCF服务以及契约定义的类库。不能够直接运转,你能够在别的门类里引用,在宿主里启用托管这几个库,有点类似于大家在Web项目中选拔的类库。

void time_Elapsed(object sender, ElapsedEventArgs e)
{
callback.DataChanged();
}
public void SetData(UserInfo _UserInfo)
{
if (!UserCollection.Users.Exists(p => p.IdCard ==
_UserInfo.IdCard))
UserCollection.Users.Add(_UserInfo);
}

   
 考虑WCF服务统一筹划的时候,服务类的定义为单独的库,能够为其余品类利用。进步代码的复用性。

public List<UserInfo> GetData()
{
return UserCollection.Users;
}
public UserInfo GetDataById(string IdCard)
{
return UserCollection.Users.First((p) => { return p.IdCard.ToLower()
== IdCard.ToLower(); });
}
public int GetCount()
{
return UserCollection.Users.Count();
}
}

  当然你也足以修改这一个代码,比如把WCF服务程序里的类,移到二个独立的类Curry,或是把类Curry的类移到WCF服务程序中。

定义数据协议:

二、概述

public enum Sex
{
Male = 1,//男性
FeMale = 0//女性
}

  通过前边的介绍大家清楚,WCF在运营时必寄宿在**“宿主程序”**之上,WCF本身不能够单独运维(每一种WCF服务必须宿主在二个Windows进度中)。.net
提供了多样宿主供WCF运营,WCF依然卓殊灵活的。

// 使用下边示例中注解的数量约定将复合类型丰裕到服务操作。
[DataContract]
public class UserInfo
{
[DataMember]
public string IdCard { set; get; }

lovebet爱博体育 1

[DataMember]
public string FirstName { set; get; }
[DataMember]
public string LastName { set; get; }
[DataMember]
public Sex UserSex { set; get; }

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

[DataMember]
public Int16 Age { set; get; }
}

 那节的言传身教大家再一次确立WCF类库项目为例做示范,名称为:WCFLibrary,并删除自动生成的七个公文(I瑟维斯1.cs、Service1.cs)。如下图所示:

 

lovebet爱博体育 2

2.创制控制台应用程序,将上面的WCF服务库项目增加进去。配置和开辟宿主、终结点、行为描述。
host、EndPoint、behaviors可以在Config中装置,也得以在程序中落到实处。

lovebet爱博体育 3

A.配置Config,控制台主程序中只须求运营宿主就行了,配置节为:

鼠标右键查看项目性质。大家发现,其实“WCF类库项目”与大家一直创造的“类库项目”都以类库,只但是多了WCF的类库项目在新建时多了五个dll的引用(System.ServiceModel.dll、System.Runtime.Serialization.dll)和二个自动生成的布署文件(该配置文件只用于调节和测试时利用,在WCF寄宿将来会接纳宿主的配备文件与其余应用程序通讯)。那更表达了小编们在做分式程序支付的时候与大家平日支付的应用程序没有多大的不一致,只要我们在应用程序间通信时“符合WCF的预定”即可。

<system.serviceModel>
<services>
<service name=”WcfServiceLibrary.User”>
<endpoint address=”” binding=”basicHttpBinding”
contract=”WcfServiceLibrary.IUser”>
<identity>
<dns value=”localhost” />
</identity>
</endpoint>
<endpoint address=”mex” binding=”mexHttpBinding”
contract=”IMetadataExchange” />
<host>
<baseAddresses>
<add baseAddress=”http://localhost:8021/User/” />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<!–为制止泄漏元数据新闻,
请在配置前将以下值设置为 false–>
<serviceMetadata httpGetEnabled=”True” httpsGetEnabled=”True”/>
<!–要收到故障非常详细音讯以开始展览调节,
请将以下值设置为 true。在配置前安装为 false
以免止泄漏非常新闻–>
<serviceDebug includeExceptionDetailInFaults=”False” />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>

  服务端大家还和第①个科目一样(IUser接口与User完结),只建立一个艺术做为我们调用的演示代码如下:

//启动SeriviceHost


static void Main(string[] args)
{

using System;

ServiceHost host = new ServiceHost(typeof(WcfServiceLibrary.User));
host.Open();
Console.WriteLine(“WCF中的HTTP监听已开发银行….”);
Console.ReadLine();
host.Close();
}

using System.Collections.Generic;

 

using System.Linq;

B.配置文件中的配置,也足以向来在先后中落到实处:

using System.Runtime.Serialization;

static void Main(string[] args)
{

using System.ServiceModel;

//创制宿主的集散地址
Uri baseAddress = new Uri(“http://localhost:8021/User“);
//创建宿主
using (ServiceHost host = new
ServiceHost(typeof(WcfServiceLibrary.User), baseAddress))
{
//向宿主中添加终结点
host.AddServiceEndpoint(typeof(WcfServiceLibrary.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();
}

using System.Text;

}

namespace WCFLibrary

3.起步服务,创设Web应用程序。

{

添加对劳务的引用(在引用上右键–>输入我们定义的劳动宿主的集散地址(此处为:http://localhost:8021/User)–&gt;前往–&gt;确定)。

    // NOTE: You can use the “Rename” command on the “Refactor” menu to
change the interface name “IUser” in both code and config file together.

若报错的话,首先检查WCF服务地点是不是正确;再检查防火墙设置,服务端口是不是曾经设置为平安端口。一般都以端口没有开放的因由促成错误。

    [ServiceContract]

    public interface IUser     //公布接口

    {

        [OperationContract]

        string ShowName(string name);

    }

}


using System;

using System.Collections.Generic;

using System.Linq;

using System.Runtime.Serialization;

using System.ServiceModel;

using System.Text;

namespace WCFLibrary

{

    // NOTE: You can use the “Rename” command on the “Refactor” menu to
change the class name “User” in both code and config file together.

    public class User : IUser    //达成接口

    {

        string IUser.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“检验运营作效果果;

 

IIS宿主

  大家在首先节中,把WCF寄宿在IIS之上,在IIS中宿主多个服务的严重性优点是在发出客户端请求时宿主进度会被自动运维,并且你能够重视IIS来保管宿主进程的生命周期。在付出和利用的进程与Web
Service分外相像。

实际请参见本类别的首先节课程。

 

控制台应用程序宿主

  建立宿主

  (1)在缓解方案下新建控制台出口项目
WCFConsole。

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

  (3)添加 WCF
服务类库(WCFLibrary)的种类引用。(上面创造的)

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


 

using System;

using System.Collections.Generic;

using System.Linq;

using System.ServiceModel;

using System.ServiceModel.Description;

using System.Text;

using System.Threading.Tasks;

using WCFLibrary;

namespace WCFConsole

{

    class Program

    {

        static void Main(string[] args)

        {

            //创造宿主的集散地址

            Uri baseAddres = new Uri(“http://localhost:8080/User“);

            //创设宿主

            using (ServiceHost host = new ServiceHost(typeof(User),
baseAddres))

            {

                //向宿主中添加终结点

                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)运转宿主程序[在客户端调用时要先运转宿主程序],如下图所示:

lovebet爱博体育 4

 

 表达宿主建立成功。在上例中用到”ServiceHost”类,这里只是简单的行使;

   該過程的一個小經驗!!!!

*注意:一定要在文书夹中用组织者权限打开,否则会出现以下极度*:

lovebet爱博体育 5

     之后——建立客户端

  (1)重新确立化解方案–>Web应用程序项目。

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

lovebet爱博体育 6

(3)测试程序如下图所示表明成功(专注:一定要先运转大家的宿主程序才行,借使宿主没有打开的话会报错:由于目的总括机积极拒绝,无法连接。)

lovebet爱博体育 7

Windows应用程序宿主 

 

创造宿主

 

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

 

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

 

  (3)添加 WCF
服务类库(WCFLibrary)的门类引用。

 

  (4)添加应用程序配置文件App.config。

 

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

 

注:这几个同朱哥教的是一样的,故不重复啦!

 

 

WAS宿主(用到的时候在看,下面的网址–)

 

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

 

  IIS7允许通过HTTP外的商议进行激活和网络通讯。此条件适合开发可透过WCF支持的其余网络协议(包蕴http、net.tcp、net.pipe、net.msmq)进行通信的WCF服务。

   
 陈设简单、管理有利于,这么些网络协议在布置时可像Http一样,直接丢到IIS7上即可,大家在下边包车型地铁例子中以net.tcp为商量为例。IIS7以下的本子只好帮助Http的通讯。

 

宿主—至此—结束!!