返回顶部
首页 > 资讯 > 精选 >WCF中Windows通讯接口怎么开发
  • 532
分享到

WCF中Windows通讯接口怎么开发

2023-06-30 13:06:12 532人浏览 安东尼
摘要

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

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

概述

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

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

WEBService是以BasicHttpBing方式运行的WCF。

方案结构:

创建解决方案WCFService

WCF中Windows通讯接口怎么开发

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

引用关系

  • 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配置编辑器”菜单编辑配置文件。

<configuration>  <startup>    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />  </startup>  <system.serviceModel>服务      <service name="Service.CalculatorService" behaviorConfiguration="metadataBehavior">        <endpoint address="http://127.0.0.1:1111/GettingStarted" binding="wsHttpBinding"  contract="Service.Interface.ICalculator"></endpoint>      </service>    </services>行为      <serviceBehaviors>        <behavior name="metadataBehavior">          <serviceMetadata httpGetEnabled="true"   httpGetUrl="http://127.0.0.1:1111/GettingStarted/metadata"/>        </behavior>      </serviceBehaviors>    </behaviors>   </system.serviceModel></configuration>

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。

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

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

配置文件

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

  <system.serviceModel>    <services>      <service name="GettingStarted.CalculatorService" behaviorConfiguration="metadataBehavior" >        <endpoint address="CalculatorService" binding="wsHttpBinding" contract="Calculator"/>      </service>    </services>    <behaviors>      <serviceBehaviors>        <behavior name="metadataBehavior" >          <serviceMetadata httpGetEnabled="true" />        </behavior>      </serviceBehaviors>    </behaviors>  </system.serviceModel>

五、实现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();}

调用:

http://&hellip;/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(), "<a href="http://127.0.0.1:1111/CalculatorService" rel="external nofollow"   target="_blank">http://127.0.0.1</a>: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));    }}

配置文件:

<configuration>  <system.serviceModel>    <client>      <endpoint name="CalculatorService"  address="http://127.0.0.1:1111/CalculatorService"  binding="wsHttpBinding"    contract="Service.Interface.ICalculator"  />    </client>  </system.serviceModel></configuration>

八、绑定类型

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

--结束END--

本文标题: WCF中Windows通讯接口怎么开发

本文链接: https://lsjlt.com/news/329191.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • WCF中Windows通讯接口怎么开发
    本篇内容介绍了“WCF中Windows通讯接口怎么开发”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!概述WCF:Windows Commun...
    99+
    2023-06-30
  • WCF入门教程之Windows通讯接口
    目录概述方案结构:一、Contracts协定二、Services服务三、ServiceHost自我服务宿主终结点(EndPoint)1、编码方式2、配置文件方式四、IIS宿主五、实现...
    99+
    2024-04-02
  • WCF接口怎么用
    这篇文章主要为大家展示了“WCF接口怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“WCF接口怎么用”这篇文章吧。WCF提供了四种类型的行为:服务行为、终结点行为、契约行为和操作行为。这四种...
    99+
    2023-06-17
  • WCF中怎么实现一个ICommunicationObject接口
    本篇文章为大家展示了WCF中怎么实现一个ICommunicationObject接口,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。WCF托管特性ICommunicationObject接口publi...
    99+
    2023-06-17
  • python http通信接口开发示例
    目录前言一、flask框架1.1,简介1.2,参数说明 get 和 post的区别二、使用步骤1.引入库2.完整代码实现3.测试总结前言 需求背景来源于AI算法通信接口编写&hell...
    99+
    2023-05-18
    python http通信接口 python 通信接口
  • 腾讯云服务器端口怎么开通
    腾讯云服务器端口的开通通常需要进行以下步骤: 确认您的网络设置是否正确,例如您是在公共互联网连接上还是与服务器之间连接的公共互联网连接。 使用腾讯云提供的客户端工具,如 Telnet 等进行连接。在连接时,需要输入服务提供商提供的用户名...
    99+
    2023-10-26
    腾讯 端口 服务器
  • 怎么用goLang开发windows窗口界面
    本篇内容主要讲解“怎么用goLang开发windows窗口界面”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用goLang开发windows窗口界面”吧!今天找了一下。找到了一个 walk的...
    99+
    2023-06-20
  • C#串口通讯收发数据怎么配置
    在C#中配置串口通讯主要涉及以下几个步骤: 引入System.IO.Ports命名空间:在C#程序中使用串口通讯需要引入Syst...
    99+
    2024-04-02
  • java怎么实现webservice接口开发
    要实现Java的Web Service接口开发,可以使用Java的一些框架和库来帮助开发。以下是一个基本的步骤示例:1. 创建一个J...
    99+
    2023-09-15
    java webservice
  • java开发api接口怎么编写
    编写 Java 开发 API 接口的步骤如下:1. 定义接口:在 Java 中,可以使用 `interface` 关键字定义接口。在...
    99+
    2023-08-08
    java api
  • Golang开发之接口怎么使用
    今天小编给大家分享一下Golang开发之接口怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Golang的接口是什么在...
    99+
    2023-07-05
  • 腾讯云服务器端口怎么开通的
    打开腾讯云服务器的管理页面,点击“配置”按钮,然后在弹出的页面中点击“服务器配置”选项。 在服务器配置页面中,会列出当前服务器所支持的端口和相关的配置信息,用户可以选择要开通的端口。 点击“添加端口”按钮,在弹出的页面中填写端口号和相关的...
    99+
    2023-10-28
    腾讯 端口 服务器
  • Python 和 JavaScript 如何在 Windows 接口中通信?
    Python 和 JavaScript 是两种不同的编程语言,它们在不同的领域中都有着广泛的应用。在一些需要将这两种语言结合起来使用的场景中,如何在 Windows 接口中实现它们的通信呢? 本文将从以下几个方面来详细介绍 Python ...
    99+
    2023-08-11
    windows 接口 javascript
  • 接口开发中,如何通过PHP编程算法打包提升开发效率?
    在现代互联网开发中,接口开发是一项非常重要的工作。无论是网站还是APP,都需要通过接口来实现数据的交互和传输。在接口开发中,如何通过PHP编程算法打包提升开发效率呢?本文将从以下几个方面来进行讲解。 一、什么是PHP编程算法打包? PHP...
    99+
    2023-06-26
    编程算法 打包 接口
  • windows默认远程连接端口怎么开启
    在Windows操作系统中,默认的远程桌面连接端口是3389。要开启远程连接功能,请按照以下步骤操作:1. 打开控制面板。可以通过在...
    99+
    2023-09-08
    windows
  • ssl端口怎么开通
    开通ssl端口的方法:打开控制面板,选择windows防火墙。进入防火墙,点击“高级”设置。进入高级防火墙设置,点击“入站规则”。再点击“新建规则”。在弹出来会话框中,选中“端口”,点击下一步。在特定本地端口中输入“443”,点击一下步。进...
    99+
    2024-04-02
  • 云服务器开通端口怎么开通
    如果您想要在云服务器上开通端口,您需要使用一个公共的API或者Web应用程序接口来打开端口,具体步骤如下: 选择需要开通端口的云服务:选择您需要开通的云服务类型,例如AWS、Google Cloud或微软的Azure等。 配置API或W...
    99+
    2023-10-27
    端口 服务器
  • Windows中怎么实现Python开发
    Windows中怎么实现Python开发,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。具体教程如下所示:初学者在 Windows 上使用 Python 的教程web 开发者...
    99+
    2023-06-16
  • OpenAPI开发怎么动态的添加接口
    这篇文章主要介绍“OpenAPI开发怎么动态的添加接口”,在日常操作中,相信很多人在OpenAPI开发怎么动态的添加接口问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”OpenAPI开发怎么动态的添加接口”的疑...
    99+
    2023-07-06
  • 从入门到精通:Python API接口在Linux开发中的应用!
    Python是一种高级编程语言,简单易学,可读性强。Python的生态系统非常强大,有很多的第三方库和模块,可以满足各种需求。在Linux开发中,Python API接口的应用越来越广泛。本文将从Python API接口的基础知识讲起,介...
    99+
    2023-10-29
    linux api 接口
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作