劳动协议、操作协议、数据协议,服务应用程序

1.创造WCF服务库:Wcf瑟维斯(Service)(Service)Library,依据活动创立的代码修改自己的WCF
服务协议、操作协议、数据协议。本次先实现简单的WCF最焦点的通信格局:请求-》应答情势。

接下去继续WCF(网上的法门)(实例)

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

1、无废话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托管的主次,如本体系的首节所示。

// 注意:
使用“重构”菜单上的“重命名”命令,可以同时改变代码和配备文件中的类名“瑟维斯(Service)(Service)1”。
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服务程序里的类,移到一个单独的类库里,或是把类库里的类移到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; }

图片 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瑟维斯(Service)1.cs、瑟维斯(Service)(Service)1.cs)。如下图所示:

 

图片 2

2.开立控制台应用程序,将方面的WCF服务库项目增长进去。配置和开拓宿主、终结点、行为描述。
host、EndPoint、behaviors能够在Config中安装,也可以在先后中实现。

图片 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;

          

        }

    }

}


鉴于原先的契约为I瑟维斯(Service),现在的为IUser,所以安排文件有两处要修改为:

<service name=”WCFLibrary.User”>

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

点击“F5“检验运行效果;

 

IIS宿主

  我们在首先节中,把WCF寄宿在IIS之上,在IIS中宿主一个服务的关键优点是在发出客户端请求时宿主进程会被活动启动,并且你可以凭借IIS来管理宿主进程的生命周期。在付出和使用的经过与Web
Service(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)运行宿主程序[在客户端调用时要先运行宿主程序],如下图所示:

图片 4

 

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

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

*注意:一定要在文件夹中用协会者权限打开,否则会油可是生以下非凡*:

图片 5

     之后——建立客户端

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

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

图片 6

(3)测试程序如下图所示表明成功(留神:一定要先运行咱们的宿主程序才行,即便宿主没有打开的话会报错:由于目标总结机积极拒绝,不能连接。)

图片 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的通信。

 

宿主—至此—结束!!

 

相关文章