WCF服务编程-非WCF应用程序使用WCF服务
很多人刚开始了解WCF的时候,对于非WCF应用程序如何使用WCF提供出来的服务一直很困惑。其实WCF框架的默认绑定已经考虑到了这一点。即如果某个服务需要给非WCF应用程序使用的话,只需要更改一下配置文件即可。
WCF附带绑定描述列表
绑定 |
配置元素 |
说明 |
BasicHttpBinding |
<basicHttpBinding> |
一个绑定,适用于与符合 WS-Basic Profile 的 Web 服务(例如基于 ASP.NET Web 服务 (ASMX) 的服务)进行的通信。此绑定使用 HTTP 作为传输协议,并使用文本/XML 作为默认的消息编码。 |
WSHttpBinding |
<wsHttpBinding> |
一个安全且可互操作的绑定,适合于非双工服务约定。 |
WSDualHttpBinding |
<wsDualHttpBinding> |
一个安全且可互操作的绑定,适用于双工服务协定或通过 SOAP 媒介进行的通信。 |
WSFederationHttpBinding |
<wsFederationHttpBinding> |
一个支持 WS-Federation 协议的安全的、可互操作的绑定,使联盟中的组织可以高效地对用户进行身份验证和授权。 |
NetTcpBinding |
<netTcpBinding> |
一个安全且经过优化的绑定,适用于 WCF 应用程序之间跨计算机的通信。 |
NetNamedPipeBinding |
<netNamedPipeBinding> |
一个安全、可靠且经过优化的绑定,适用于 WCF 应用程序之间计算机上的通信。 |
NetMsmqBinding |
<netMsmqBinding> |
一个排队绑定,适用于 WCF 应用程序之间的跨计算机的通信。 |
NetPeerTcpBinding |
<netPeerTcpBinding> |
一个支持多计算机安全通信的绑定。 |
MsmqIntegrationBinding |
<msmqIntegrationBinding> |
一个适合于 WCF 应用程序和现有消息队列应用程序之间的跨计算机通信的绑定。 |
BasicHttpContextBinding |
<basicHttpContextBinding> |
一个绑定,适用于与符合 WS-Basic Profile 且允许使用 HTTP Cookie 交换上下文的 Web 服务进行的通信。 |
NetTcpContextBinding |
<netTcpContextBinding> |
一个安全且经过优化的绑定,适用于允许使用 SOAP 标头交换上下文的 WCF 应用程序之间跨计算机的通信。 |
WebHttpBinding |
<webHttpBinding> |
一个绑定,可用于为通过 HTTP 请求(而不是 SOAP 消息)公开的 WCF Web 服务配置终结点。 |
WSHttpContextBinding |
<wsHttpContextBinding> |
一个安全且可互操作的绑定,适用于允许使用 SOAP 标头交换上下文的非双工服务协定。 |
绑定功能列表
绑定 |
互操作性 |
安全性(默认) |
会话 (默认) |
事务 |
双工 |
编码(默认) |
流 (默认) |
BasicHttpBinding |
Basic Profile 1.1 |
(无)、传输、消息、混合 |
(无) |
(无) |
n/a |
文本、(MTOM) |
是 (缓冲式) |
WSHttpBinding |
WS |
传输、(消息)、混合 |
(无)、可靠会话、安全会话 |
(无)、是 |
n/a |
(文本)、MTOM |
否 |
WSDualHttpBinding |
WS |
(消息)、无 |
(可靠会话)、安全会话 |
(无)、是 |
是 |
(文本)、MTOM |
否 |
WSFederationHttpBinding |
WS-Federation |
(消息)、混合、无 |
(无)、可靠会话、安全会话 |
(无)、是 |
否 |
(文本)、MTOM |
否 |
NetTcpBinding |
.NET |
(传输)、消息、无、混合 |
(传输)、可靠会话、安全会话 |
(无)、是 |
是 |
二进制 |
是 (缓冲式) |
NetNamedPipeBinding |
.NET |
(传输)、无 |
无、(传输) |
(无)、是 |
是 |
二进制 |
是 (缓冲式) |
NetMsmqBinding |
.NET |
消息、(传输)、无 |
(无)、传输 |
无、(是) |
否 |
二进制 |
否 |
NetPeerTcpBinding |
对等 |
(传输) |
(无) |
(无) |
是 |
否 |
|
MsmqIntegrationBinding |
MSMQ |
(传输) |
(无) |
无、(是) |
n/a |
n/a |
否 |
BasicHttpContextBinding |
基本配置文件 1.1 |
(无)、传输、消息、混合 |
(无) |
(无) |
n/a |
文本、(MTOM) |
是 (缓冲式) |
NetTcpContextBinding |
.NET |
(传输)、消息、无、混合 |
(传输)、可靠会话、安全会话 |
(无)、是 |
是 |
二进制 |
是 (缓冲式) |
WSHttpContextBinding |
WS |
传输、(消息)、混合 |
(无)、可靠会话、安全会话 |
(无)、是 |
n/a |
文本、(MTOM) |
否 |
功能描述列表
功能 |
说明 |
互操作性类型 |
指定绑定用来确保互操作的协议或技术。 |
安全性 |
指定如何保护通道: · 无:不保护 SOAP 消息且不验证客户端的身份。 · 传输:在传输层上满足安全要求。 · 消息:在消息层上满足安全要求。 · 混合:声明包含在消息中;完整性和保密性要求由传输层满足。 |
会话 |
指定此绑定是否支持会话协定。 |
Transactions |
指定是否启用事务。 |
双工 |
指定是否支持双工协定。请注意,此功能要求支持绑定中的会话。 |
编码 |
指定消息的网络格式。允许的值包括: · 文本:例如 UTF-8。 · 二进制 · 消息传输优化机制 (MTOM):一种对 SOAP 信封上下文中二进制 XML 元素高效编码的方法。 |
流 |
指定传入和传出消息是否支持流。使用绑定上的 TransferMode 属性可设置值。允许的值包括: · Buffered:请求消息和响应消息都是缓冲式的。 · Streamed:请求消息和响应消息都是流式的。 · StreamedRequest:请求消息是流式的,而响应消息是缓冲式的。 · StreamedResponse:请求消息是缓冲式的,而响应消息是流式的。 |
通过WCF 附带绑定列表我们可以看到系统提供的BasicHttpBinding绑定适用于与Web服务进行的通信。我们将《WCF服务编程-HelloWorld》的示例为基本在解决方案中添加一个.NET 2.0的非WCF的控制台应用程序,用于向WCF服务请求消息。
第一步 解决服务协定问题
我们知道之前在做Hello World程序时第一步要先创建一个服务协定并在客户端和服务器端都实现这个协定,当时我们是通过引用协定的项目来解决的。但是在非WCF应用程序中不能引用使用WCF的组件那该怎么办呢?其实之前已经提了一下就是服务协定是可以通过WSDL来描述的。那么就跟Web Service一样使用了,在非WCF应用程序中。
默认情况下不能使用HttpGet的方式直接获取WCF服务的协定,需要在服务端的配置文件中定制服务行为来实现:
<service name="Cbcye.Service.HelloWorldService" behaviorConfiguration="MyHttpGetBehaviors" >
<behaviors>
<serviceBehaviors>
<behavior name="MyHttpGetBehaviors" >
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
配置完成之后我们就可以使用IE访问:http://localhost:7788/cbcye/helloworld?wsdl去获得服务协定了
第二步 在.NET 2.0应用程序中使用WCF服务
下面大家应该比较清楚了。就是在.NET 2.0的应用程序中像使用Web Serivce一样使用服务就可以了。因为是在同一个解决方案,因此需要在Visual Studio外启动服务端的应用程序。添加Web Service引用之后,接下来就可以是在代码中使用服务了,因为代理类已经创建好了。
{
ServiceProxy.HelloWorldService hl = new Cbcye.Client2.ServiceProxy.HelloWorldService();
Console.WriteLine("[Client] "+hl.Getstring("Request From .NET 2.0"));
Console.ReadKey(true);
}
第三步 测试运行结果
以下是运行的结果,源代码可以在此下载
通过tcpTrace对消息的跟踪,我们可以看到两次调用其实都是采用SOAP协议在进行
使用WCF客户端程序调用
使用非WCF客户端调用
转载于:https://www.cnblogs.com/cbcye/archive/2009/06/03/1495179.html
WCF服务编程-非WCF应用程序使用WCF服务相关推荐
- 微服务架构设计模式~为应用程序定义微服务架构
为应用程序定义微服务架构 第一步:定义系统操作 第二步:定义服务 第三步:定义服务API和协作方式 第一步:定义系统操作 第二步:定义服务 第三步:定义服务API和协作方式
- android服务无法启动,Android应用程序无法启动服务
嘿,我正在尝试在我的 Android应用程序上实现一项服务.服务必须执行活动的相同任务. IE,如果在CallLog.Calls内容提供程序上发生某些更改,则必须通知服务并将数据插入数据库,即使应用程 ...
- 服务助手NSSM——将Windows程序封装成服务
文章目录 简介 安装 初试 删除服务 详细用法 服务依赖 进程优先级 关闭服务 退出和重启 I/O 文件轮换 环境变量 事件钩子 参考文献 简介 NSSM 可以将 Windows 程序封装成服务,当服 ...
- WCF服务编程 学习笔记(1)
你或许可以使用某一技术实现某些功能,可以按着指定的要求,完成特定的功能,实现某一想要的效果,这表示你可以使用该技术,会使用该技术,但是我们不能停留在使用的层次上,还要了解它们的运行机制,可能有点深了, ...
- WCF服务编程设计规范(9):中文、中英文对照、英文版资料共享下载
这里我把所有的<WCF服务编程设计规范>这个系列的资料共享出来,包含<WCF编码规范>与<WCF最佳实践>的翻译手稿,提供中文.中英文对照.英文版资料共享Word与 ...
- 《WCF技术内幕》翻译1:《WCF技术内幕》目录和作者简介
翻译序言: 我现在推荐一本很好的WCF学习书籍:<Inside Microsoft Windows Communication Foundation>.Justin Smith先生所著.2 ...
- 微信小程序自动化测试——微信小程序云测服务
MiniTest 微信小程序云测服务简介 MiniTest 微信小程序云测服务是一套由微信测试团队自主研发,联合WeTest云真机能力,共同推出的微信小程序自动化测试服务. 服务基于云真机,支持开发者 ...
- Oracle单机报监听不支持服务,(转)oracle 启动监听 报“监听程序不支持服务” 解决...
转自 http://www.51testing.com/html/99/478599-842622.html 今天安装了oracle后,启动监听,报错如下: 启动tnslsnr: 请稍候... TNS ...
- 将Java应用程序作为Windows服务安装
这听起来像是您不需要的东西,但是有时候,当您分发最终用户软件时,可能需要将Java程序安装为Windows服务. 我之所以必须这样做,是因为我开发了一种用于公务员的工具 ,可以自动将其Excel文件转 ...
- 白杨SEO:公众号、小程序微信服务搜索怎么做?搜一搜服务搜索排名规则解析
新知达人, 白杨SEO:公众号.小程序怎么做微信服务搜索? 大纲如下: 1.搜一搜功能有哪些?品牌官方区怎么申请和条件? 2.微信搜一搜的服务搜索是什么? 3.微信公众号怎么做服务搜索? 4.微信小程 ...
最新文章
- 吵疯了,Pull Request到底是个啥?
- ORACLE DBA的职责
- mysql 常见错误_mysql常见的错误提示问题处理小结
- git pull命令执行时,命令框不可操作的问题
- linux boot菜单列表,Bootstrap 下拉菜单(Dropdowns)简介
- java学习(93):线程的创建方法二
- Android入门(五) | Activity 的生命周期
- django的视图与模板
- Android NDK学习(2)
- Openstack学习笔记(十五)-Horizon源代码学习笔记(五)
- 我的世界seus光影java版下载_我的世界seus光影mod
- gulp压缩图片插件大比拼
- 【Python3】简易爬虫实现船舶的MMSI的获取
- win10c盘清理(win10磁盘清理和磁盘整理)
- matlab 打开access文件,matlab读取Access数据(.mdb文件)
- .net core 的图片处理及二维码的生成及解析
- 中序和后序(前序和中序)序列确定一颗二叉树
- 2023-04-03 Linux中杀死进程kill和killall命令的区别,着重介绍killall
- 用DIV+CSS技术设计的凤阳旅游网站(web前端网页制作课作业)HTML+CSS+JavaScript
- comsol 超声声场模拟_基于COMSOL的声悬浮声场模拟仿真