千家信息网

WCF中Windows通讯接口怎么开发

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,本篇内容介绍了"WCF中Windows通讯接口怎么开发"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
千家信息网最后更新 2026年10月31日WCF中Windows通讯接口怎么开发

本篇内容介绍了"WCF中Windows通讯接口怎么开发"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

概述

WCF:Windows Communication Foundation ,Windows通信基础。

SOP:Service Orientation Architechture,面向服务的架构。

WebService是以BasicHttpBing方式运行的WCF。

方案结构:

1、创建解决方案WCFService

依次添加四个项目,如上图,Client和Hosting为控制台应用程序,Service和Service.Interface均为类库。

2、引用关系

  • Service.Interface:定义服务契约(Service Contract)接口,引用WCF核心库System.ServiceModel.dll;

  • Service:定义服务的项目,由于需要实现具体的服务,而服务契约在Service.Interface中,所以要引用Service.Interface项目;

  • Hosting:服务宿主的控制台程序,需要引用Service.Interface和Service项目,同时还要引用System.ServiceModel.dll类库:

  • Client:一个控制台应用程序的客户端,需要引用Service.ServiceModel类库。

一、Contracts协定

一个类库项目,定义服务契约。

服务契约抽象了服务的所有操作,一般契约为接口形式存在。

//服务协定[ServiceContract(Name = "ICalculator", Namespace = "http://SampleWcfTest")] //webservice描述文件用的portType命名空间    //CallbackContract =typeof(ICallBack),//双工时的返回协定    //ConfigurationName = "Calculator",//配置文件重的服务名    //ProtectionLevel = System.Net.Security.ProtectionLevel.EncryptAndSign,//保护等级    //SessionMode = SessionMode.Allowed//设置会话的支持模式public interface ICalculator{    //操作协定    [OperationContract]    double Add(double n1, double n2);}

二、Services服务

一个类库项目,提供对契约的实现。

public class Calculator : ICalculator{    public double Add(double n1, double n2)    {        double result = n1 + n2;        Console.WriteLine("Received Add({0},{1})", n1, n2);        // Code added to write output to the console window.        Console.WriteLine("Return: {0}", result);        return result;    }}

VS的"WCF服务库项目"自动生成了svc文件和对应的svc.cs文件以及App.config文件,运行此项目,会自动启动"WCF服务主机"和"WCF测试客户端"窗口

三、ServiceHost自我服务宿主

一个控制台项目,通过自我寄宿的方式作为Sevice项目服务的宿主。寄宿进程为ServiceHost1.exe。
服务寄宿的目的是开启一个进程,为WCF服务提供一个运行环境,并为服务添加一个或者多个终结点,然后暴漏给服务消费者。

WCF服务需要一个运行着的宿主进程,服务寄宿就是给服务指定一个宿主的过程。、

终结点(EndPoint)

WCF采用基于终结点(EndPoint)的通信手段。终结点有地址(Address),绑定(Binding)和契约(Contract)三部分组成,三要素也可以记作:EndPoint=ABC。

一个终结点包含了通信所必须的所有信息,具体如下:

  • Address:地址决定了服务的位置,解决了寻址的问题;

  • Binding:绑定实现了通信的所有细节,包括网络传输,消息编码,以及其他为实现某种功能(比如传输安全,可靠消息传输,事务等)对消息进行的相应处理。
    WCF中具有一系列的系统定义绑定,比如BasicHttpBinding,WSHttpBinding和NetTcpBinding,WSHttpBinding、NetMsmqBindiing等;

  • Contract:契约是对服务操作的抽象,也是对消息交换模式以及消息结构的定义。

1、编码方式

//承载服务的宿主using (ServiceHost selfHost = new ServiceHost(typeof(Calculator))){    try    {   //添加服务终结点        selfHost.AddServiceEndpoint(typeof(ICalculator), new WSHttpBinding(), new Uri("http://localhost:8000/GettingStarted/"));        //添加服务元数据行为        if (selfHost.Description.Behaviors.Find() == null)        {            ServiceMetadataBehavior smb = new ServiceMetadataBehavior();            smb.HttpGetEnabled = true;            smb.HttpGetUrl = new Uri("http://localhost:8000/GettingStarted/metadata")            selfHost.Description.Behaviors.Add(smb);        }        selfHost.Open();        Console.WriteLine("The service is ready.");        Console.WriteLine("input to terminate service.");        Console.WriteLine();        while ("exit" == Console.ReadLine())        {            selfHost.Close();        }    }    catch (CommunicationException ex)    {        Console.WriteLine(ex.Message);        selfHost.Abort();    }}

2、配置文件方式

打开Hosting项目中的app.config,添加以下代码即可。

可直接右键点击config文件选择"编辑WCF配置"菜单,或通过VS的"工具"菜单,选择"WCF Service配置编辑器"菜单编辑配置文件。

          服务                        行为                                             

Hosting代码修改如下:

    using (ServiceHost host = new ServiceHost(typeof(CalculatorService)))    {        host.Opened += delegate          {              Console.Write("CalculatorService已经启动,按任意键终止服务");          };        host.Open();        Console.Read();    }

四、IIS宿主

一个Web应用程序,通过IIS寄宿的方式将服务寄宿于IIS中,

寄宿进程为w3wp.exe。WAS激活服务:Window Activation Services。

1、创建WCF服务文件:CalculatorService.svc:

<%@ ServiceHost Sevice="GettingStarted.CalculatorService" %>

2、配置文件

与app.config相比,web.config无EndPointAddress?服务的地址为.svc所在的地址,默认的元数据为…../CalculatorService.svc?ws…

                                                                              

五、实现Rest 风格的web服务

可以使用 WCF REST 编程模型。

默认WebHttpBinding。

在协定的实现方式上添加 WebGet或者WebInvoke属性

[OperationContract][WebInvoke(UriTemplate = "div?x={x}&y={y}")]long Divide(long x, long y);[OperationContract][WebGet(UriTemplate = "hello?name={name}")]string SayHello(string name);

举例2:

[ServiceContract]public  interface ITestService{  [OperationContract]  [WebInvoke(Method = "POST", UriTemplate = "Test1", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)]  string Test1(string userName, string password);         [OperationContract]  [WebGet(UriTemplate = "Test/{id}", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]  string Test(string id);        }

六、使用预配置的主机类WebServiceHost

使用WebServiceHost类

Uri baseAddress = new Uri("http://localhost:8000/");WebServiceHost svcHost = new WebServiceHost(typeof(CalcService), baseAddress);try{    svcHost.Open();    Console.WriteLine("Service is running");    Console.WriteLine("Press enter to quit...");    Console.ReadLine();    svcHost.Close();}catch (CommunicationException cex){    Console.WriteLine("An exception occurred: {0}", cex.Message);    svcHost.Abort();}

3、调用:

http://…/div?x=1&y=2

七、client:一个客户端

1、使用VS"添加服务引用"生成的CalculatorServiceClient

CalculatorServiceClient基类是System.ServiceModel.ClientBase,该基类封装了ChannelFactory

using (CalculatorServiceClient proxy = new CalculatorServiceClient()){    double result = proxy.Add(1, 2);    Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);}

2、不用添加服务引用,使用ChannelFactory方式

//using (ChannelFactory channelFactory = new ChannelFactory(new WSHttpBinding(), "http://127.0.0.1:1111/CalculatorService"))//构造函数中指定了终结点的ABC三要素,using (ChannelFactory channelFactory = new ChannelFactory("CalculatorService"))//通过配置文件来进行,对应的为config 文件中终结点的name{    ICalculator proxy = channelFactory.CreateChannel();    using (proxy as IDisposale)    {        Console.WriteLine("x+y={2} when x={0} and y={1}", 1, 2, proxy.Add(1, 2));    }}

配置文件:

                  

八、绑定类型

WCF中常用的binding方式:

1. 基于HTTP的绑定

BasicHttpBinding、WSHttpBinding、WSDualHttpBinding和WSFederationHttpBinding选项适合于通过XML Web服务协议提供契约类型。显然,如果需要使该服务可适用于更多场合(多种操作系统和多种编程语言),这些就是需要关注的绑定,因为所有这些绑定类型都基于XML表示编码数据并且使用HTTP传送数据。

在下面清单中,注意到可以在代码中表示WCF绑定(通过System.ServiceModel名称空间中的类类型),或者作为在*.config文件中定义的XML属性表示WCF绑定。

  • BasicHttpBinding:用于绑定符合WS-Basic Profile(WS-I Basic Profile 1.1)的WCF服务。该绑定使用HTTP作为传送方式,并且使用Text/XML作为默认消息编码。用于兼容旧的Web ASMX 服务。
    BasicHttpBinding是所有以Web服务为中心的协议中最简单的协议。特别是,该绑定将确保WCF服务符合由WS-I定义的名为WS-I Basic Profile 1.1的规范。

  • WSHttpBinding:类似于BasicHttpBinding,但是提供了更多的Web服务特性。该绑定添加对事务、可靠消息发送和WS-Addressing的支持。
    WSHttpBinding协议不仅集成了对WS-*规范(事务、安全性和可靠会话)子集的支持,而且支持使用消息传输优化机制(Message Transmission Optimization Mechanism,MTOM)处理二进制数据编码的能力。

  • WSDualHttpBinding:类似于WSHttpBinding,但是用于与双向契约结合使用(例如,服务和客户可以来回发送消息)。该绑定只支持SOAP安全性,并且需要可靠的消息发送。
    WSDualHttpBinding的主要优点是它添加了允许调用者和发送方使用双向消息发送(duplex messaging)通信的能力,这是一种表示调用者和发送方可以参加双向会谈的流行方法。在选择WSDualHttpBinding时,可以与WCF发布/订阅事件模型建立关联。

  • WSFederationHttpBinding:安全的和可互操作的绑定,该绑定支持WS-Federation协议,并且允许位于联盟内的组织有效地验证和授权用户
    WSFederationHttpBinding是基于Web服务的协议,在安全性最为重要时就需要使用该协议。该绑定支持WS-Trust、WS-Security和WS-SecureConversation规范,通过WCF CardSpace API表示这些规范。

  • WebHttpBinding:用于通过HTTP(非SOAP)请求提供的服务队脚本客户端有用,如ASPNet AJAX。

2. 基于TCP的绑定

如果正在构建一个分布式系统,该系统涉及使用.NET 3.0/3.5库配置的一组连网机器(换句话说,所有机器都运行Windows XP、Windows Server 2003或Windows Vista),就可以通过绕开Web服务绑定并选择使用TCP绑定来增强性能,TCP绑定确保以紧凑二进制格式(而不是XML)编码所有数据。同样,在使用下表的的绑定时,客户和主机必须是.NET应用程序。

  • NetNamedPipeBinding:用于相同机器上不同.NET应用程序之间通信的安全的、可靠的、优化的绑定。
    NetNamedPipeBinding支持事务、可靠的会话和安全的通信,但是它不能够执行跨机器的调用。如果您正在寻找在相同机器上的WCF应用程序之间推动数据(例如,跨越应用程序的域通信)的最快速方法,NetNamedPipeBinding绑定就是最佳的选择。

  • NetPeerTcpBinding:为对等(P2P)网络应用程序提供安全的绑定。
    至于NetPeerTcpBinding,可查阅.NET Framework 3.5 SDK文档以了解关于P2P连网的细节。

  • NetTcpBinding:适合于不同机器上.NET应用程序之间通信的安全的、优化的绑定。
    NetTcpBinding类使用TCP在客户和WCF服务之间移动二进制数据。前面提及,这将导致比Web服务协议更佳的性能,但是只限于内部应用程序解决方案。此外,NetTcpBinding支持事务、可靠的会话和安全的通信。

3. 基于MSMQ的绑定

  • MsmqIntegrationBinding:该绑定可用于允许WCF应用程序向已有的MSMQ应用程序发送消息以及从这种应用程序接收消息,这种应用程序使用COM、本地C++或定义在System.Messaging名称空间中的类型

  • NetMsmqBinding:这个排队的绑定适合于不同机器上的.NET应用程序之间的通信

注:二进制编码格式使用TCP、IPC、MSMQ可以获取最佳性能,但是它是以牺牲互操作性为代价,因为它只支持WCF到WCF的通信。

"WCF中Windows通讯接口怎么开发"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

服务 程序 应用程序 应用 文件 消息 通信 项目 安全 契约 支持 配置 方式 数据 终结点 客户 宿主 机器 编码 寄宿 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 瑰夏咖啡 互联网金融科技 互联网科技股 中关村互联网科技集团 万易互联网科技 百单互联网科技有限公司 安控科技rtu产品工业互联网 西藏七维空间互联网科技有限公司 互联网对科技的发展 互联网科技与大数据专业 苏州铭阳互联网科技有限公司 消费医药和互联网科技 呼和浩特新华互联网科技学院 互联网公司高科技产品 黑云互联网科技有限公司 艺电能源互联网科技有限公司招聘 平安好医生打造互联网科技医疗 东风日产互联网科技公司叫什么 现代科技的标志之一的互联网 小牛互联网科技有限公司地址 小米移动互联网科技园 喔噻互联网科技有限公司 山东特亿宝互联网科技有限公司 中国互联网科技股 九亚互联网科技 上海致骋互联网科技 上海电发互联网科技有限公司 承德科技产业互联网发展 广州恒生互联网科技有限 万物互联网智能科技
0