概念服务、操作协议接口,服务应用程序【永利网上娱乐】

1.创设WCF服务库:WcfServiceLibrary,依照活动创立的代码修改自己的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托管的次第,如本种类的首先节所示。

// 注意:
使用“重构”菜单上的“重命名”命令,可以同时更改代码和安顿文件中的类名“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服务程序里的类,移到一个独自的类库里,或是把类库里的类移到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,并删除自动生成的四个文本(IService1.cs、Service1.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;

          

        }

    }

}


由于原先的契约为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)运行宿主程序[在客户端调用时要先运行宿主程序],如下图所示:

永利网上娱乐 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的通讯。

 

宿主—至此—结束!!

 

相关文章