windows部署的时候中get可以 post 不行_说说Windows通信基础(WCF)

说说Windows通信基础(WCF)

目录

【引言】... 2

【概述】... 2

【架构方面】... 2

【终端】... 3

【行为】... 3

【互操作性】... 4

【示例】... 4

创建一个Web端点... 4

使用标有ServiceContractAttribute、WebInvokeAttribute和WebGetAttribute属性的接口来定义服务合同。 4

实现一个服务合约类... 4

装载该服务... 5

通过C#应用程序... 5

创建一个WebServiceHost对象。... 5

添加一个带有WebHttpBehavior的ServiceEndpoint。... 5

="https://zhuanlan.zhihu.com/write#_Toc39930838">注意默认行为:... 5

打开服务,用户按回车键可以退出。... 6

通过IIS. 6

测试服务... 6

浏览器地址栏测试Get操作... 6

使用应用程序代码测试... 6

【小结】... 7

ae983c64cc472652c1260d8d7ca023e5.png

【引言】

有朋友问到WCF相关的问题。我们就通过这篇文章来了解一下。

【概述】

Windows Communication Foundation (WCF),以前称为Indigo,是.NET框架中的一个免费的开源运行时环境和一组API,用于构建畅通的、面向服务的应用程序。

【架构方面】

WCF是一个经常被用来实现和部署面向服务架构(SOA)的工具。它是利用面向服务的架构原理设计的,支持分布式计算,其中服务可能是远程应用。

客户端可以调用多个服务;

服务可以被多个客户端调用。

服务之间是松散耦合的。

服务通常有一个 WSDL 接口(Web 服务描述语言),任何WCF 客户端都可以使用该接口来调用服务,而不关心该服务托管在哪个平台上。

WCF实现了许多高级Web服务(WS)标准,如WS-Addressing、WS-ReliableMessaging和WS-Security。

随着.NET Framework 4.0的发布,WCF还提供了RSS Syndication Services、WS-Discovery、路由以及对REST服务的更好支持。

【终端】

一个WCF客户端通过一个端点连接到一个WCF服务。

每个服务都通过一个或多个端点共享合约功能。

一个端点有一个地址(它是一个指定端点可以访问的URL)和绑定属性,指定了数据的传输方式。

符号 "ABC "可以用来表示地址/绑定/契约。

绑定指定使用什么通信协议来访问服务,是否使用安全机制等等。

WCF包含了大多数常见的通信协议的预定义绑定,如SOAPover HTTP、SOAP over TCP和SOAPover Message Queues等。

WCF端点和客户端之间的交互可通过SOAP包来完成的,也可以通过XML和Json数据。

SOAP包采用简单的XML形式,这使得WCF与平台无关。

当客户端想通过端点访问服务时,不仅需要知道合约,还必须遵守端点指定的绑定。

因此,客户端和服务器都必须有兼容的端点。

随着2007年11月.NETFramework 3.5的发布,微软发布了一个编码器,在WCF中增加了对JSON序列化格式的支持。

【行为】

行为包括如下类型:修改,扩展服务,扩展客户端功能。行为允许开发人员创建自定义处理、转换或检查,当消息发送或接收时用来规范消息。行为的一些使用例子有:

· 控制元数据是否与服务一起发布。

· 为服务添加安全功能,如冒名顶替、授权或管理令牌等。

· 记录信息,如跟踪、追踪或记录信息。

· 消息或参数验证

· 当接收到消息时,调用所有额外的操作----例如当某些消息到达时通知用户。

行为实现了用于服务扩展的IServiceBehavior接口、用于端点的IEndpointBehavior、用于服务合同的IContractBehavior接口、或用于操作的IOperationBehavior。

服务行为用来规范整个服务的消息处理,而不是针对单个操作的处理。

【互操作性】

WCF支持与在同一台Windows机器上运行的WCF应用程序或

在不同的Windows机器上运行的WCF或

在Windows及其他操作系统上运行的Java等平台上构建的标准Web服务

的互操作性。

除了SOAP之外,WCF 4还支持非SOAP的XML、RSS、JSON、JSON和二进制格式,通过HTTP或HTTPS进行外部通信。

【示例】

创建一个Web端点

使用标有ServiceContractAttribute、WebInvokeAttribute和WebGetAttribute属性的接口来定义服务合同。

605150e47a487d39a78366c8daf4a0f3.png

默认情况下,WebInvokeAttribute 使用POST操作。但是,您可以通过指定一个 "method="参数来指定要操作的HTTP方法(例如,HEAD、PUT或DELETE)。WebGetAttribute没有"method="参数,只有​GET操作。

实现一个服务合约类

642fe46894975b893f9d6344ab4c10ff.png

装载该服务

通过C#应用程序

创建一个WebServiceHost对象。

5b07318c62ab49911bd861ad2c41b1d1.png

添加一个带有WebHttpBehavior的ServiceEndpoint。

869ba87c557a0ef740ec8e301c8ac5d3.png

注意默认行为:

如果不添加端点,WebServiceHost会自动创建一个默认端点。WebServiceHost 还会添加WebHttpBehavior,并禁用 HTTP 帮助页面和Web 服务描述语言 (WSDL) GET 功能,因此元数据端点不会干扰默认的HTTP 端点。

当尝试调用端点上的操作时,添加一个URL为""的非SOAP端点会导致意外行为。原因是端点的监听URI与帮助页面的URI(当你浏览到WCF服务的基本地址时显示的页面)相同。

您可以采取以下操作之一来防止这种情况的发生。

· 始终为非SOAP端点指定一个非空白URI。

· 关闭帮助页面。这可以通过下面的代码关闭帮助页面:

59dbece577c598e8a7a696f0e42e7b73.png

打开服务,用户按回车键可以退出。

1838f27311467948d8b05e3d652517ee.png

通过IIS

59d4efb8b5e2e03c183e889fea636c17.png

测试服务

浏览器地址栏测试Get操作

"http://localhost:8000/EchoWithGet?s=Hello,World!"

使用应用程序代码测试

1e3fcb3db71f2a275c3c8227d61d9bcd.png

【小结】

通过Windows Communication Foundation (WCF)我们可以创建Web端点服务。这些Web端点可以通过XML或JSON发送数据。

本文从架构方面,终端,行为和互操作性等方面对WCF进行了介绍,希望对大家有所裨益。

欢迎打赏提问。

想联系丁哥开讲,关注动态,可通过如下途径:

微信公众号,知乎,b站,油管,今日头条。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值