4 WCF中的RPC和OneWay
1 创建两个控制台项目
WcfService和WcfClient
在wcfService项目中新建一个wcf服务的文件项(HomeService)会自动附带生成一个IHomeService.cs的文件
using System.ServiceModel;namespace WcfService {// 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IHomeService”。 [ServiceContract]public interface IHomeService{//默认生成的 [OperationContract]void DoWork(string msg);//这个是我后来新加入的接口方法[OperationContract(IsOneWay =true)]void DoWork_OneWay(string msg);} }
IHomeService
using System; using System.Linq; using System.Net; using System.Net.Sockets;namespace WcfService {// 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的类名“HomeService”。public class HomeService : IHomeService{public void DoWork_OneWay(string msg){Console.WriteLine($"这是OneWay通讯,{msg}");}void IHomeService.DoWork(string msg){var ip = Dns.GetHostAddresses(Dns.GetHostName()).FirstOrDefault(i => i.AddressFamily == AddressFamily.InterNetwork).ToString();var info = string.Format($"当前 request 由 server={ip}返回message={msg}");Console.WriteLine(info);}} }
HomeService
2 创建WcfService项目会默认在其配置文件中生成相应的wcf配置
我们请求endPoint中的address,在打开的页面中可以看到有关wsdl的链接
在1中,我们wcf接口定义了两个方法,这两个方法一个是rpc的 一个是oneway的。rpc发送信息有去有回,oneway只去不回(适合用来指示服务器写日志)
以下是wsdl代码:
<?xml version="1.0" encoding="ISO-8859-1"?> <wsdl:definitions xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:wsa10="http://www.w3.org/2005/08/addressing" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:tns="http://tempuri.org/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://tempuri.org/" name="HomeService"> <wsdl:types> <xsd:schema targetNamespace="http://tempuri.org/Imports"> <xsd:import namespace="http://tempuri.org/" schemaLocation="http://localhost:8733/Design_Time_Addresses/WcfService/HomeService?xsd=xsd0"/> <xsd:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" schemaLocation="http://localhost:8733/Design_Time_Addresses/WcfService/HomeService?xsd=xsd1"/> </xsd:schema> </wsdl:types> <wsdl:message name="IHomeService_DoWork_InputMessage"> <wsdl:part name="parameters" element="tns:DoWork"/> </wsdl:message> <wsdl:message name="IHomeService_DoWork_OutputMessage"> <wsdl:part name="parameters" element="tns:DoWorkResponse"/> </wsdl:message> <wsdl:message name="IHomeService_DoWork_OneWay_InputMessage"> <wsdl:part name="parameters" element="tns:DoWork_OneWay"/> </wsdl:message> <wsdl:portType name="IHomeService"> <wsdl:operation name="DoWork"> <wsdl:input message="tns:IHomeService_DoWork_InputMessage" wsaw:Action="http://tempuri.org/IHomeService/DoWork"/> <wsdl:output message="tns:IHomeService_DoWork_OutputMessage" wsaw:Action="http://tempuri.org/IHomeService/DoWorkResponse"/> </wsdl:operation> <wsdl:operation name="DoWork_OneWay"> <wsdl:input message="tns:IHomeService_DoWork_OneWay_InputMessage" wsaw:Action="http://tempuri.org/IHomeService/DoWork_OneWay"/> </wsdl:operation> </wsdl:portType> <wsdl:binding name="BasicHttpBinding_IHomeService" type="tns:IHomeService"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="DoWork"> <soap:operation style="document" soapAction="http://tempuri.org/IHomeService/DoWork"/> <wsdl:input> <soap:body use="literal"/> </wsdl:input> <wsdl:output> <soap:body use="literal"/> </wsdl:output> </wsdl:operation> <wsdl:operation name="DoWork_OneWay"> <soap:operation style="document" soapAction="http://tempuri.org/IHomeService/DoWork_OneWay"/> <wsdl:input> <soap:body use="literal"/> </wsdl:input> </wsdl:operation> </wsdl:binding> <wsdl:service name="HomeService"> <wsdl:port name="BasicHttpBinding_IHomeService" binding="tns:BasicHttpBinding_IHomeService"> <soap:address location="http://localhost:8733/Design_Time_Addresses/WcfService/HomeService"/> </wsdl:port> </wsdl:service> </wsdl:definitions>
wsdl
我们看到dowork方法由于是rpc(默认rpc),其节点中有两个节点 一个input 一个output;dowork_OneWay方法是OneWay的(其特性构造函数中OneWay=true),其节点中只有一个input节点
3.有一点要注意的是
rpc的方法 请求的时候默认是 wsaw:Action="http://tempuri.org/IHomeService/DoWork"/> 响应是 wsaw:Action="http://tempuri.org/IHomeService/DoWorkResponse"/>,当然这个可以设置,正式由于请求响应的这个头不同,服务才知道哪是请求、哪是响应
转载于:https://www.cnblogs.com/wholeworld/p/10165343.html
4 WCF中的RPC和OneWay相关推荐
- 在WCF中实现双工通信(转载)
首先声明此文章是转载博客园蒋老师之作:http://www.cnblogs.com/artech/archive/2007/03/02/661969.html 双工(Duplex)模式的消息交互方式体 ...
- WCF技术剖析之十一:异步操作在WCF中的应用(上篇)
按照操作执行所需的资源类型,我们可以将操作分为CPU绑定型(CPU Bound)操作和I/O绑定型(I/O Bound)操作.对于前者,操作的执行主要利用CPU进行密集的计算,而对于后者,大部分的操作 ...
- [转载]我的WCF之旅(3):在WCF中实现双工通信
http://www.cnblogs.com/artech/archive/2007/03/02/661969.html 双工(Duplex)模式的消息交换方式体现在消息交换过程中,参与的双方均可以向 ...
- WCF中的序列化[上篇]
SOA 和Message Windows Communication Foundation (WCF) 是基于面向服务架构(Service Orientation Architecture--SOA) ...
- 数字证书及在WCF中的应用
一 概念 1.内容 证书的发布机构 证书的有效期 证书所有者(Subject) 签名所使用的算法 指纹以及指纹算法 公钥 私钥 2.存储区 3.有效性 二 作用 ...
- 3 weekend110的hadoop中的RPC框架实现机制 + hadoop中的RPC应用实例demo
hadoop中的RPC框架实现机制 RPC是Remotr Process Call, 进程间的远程过程调用,不是在一个jvm里. 即,Controller拿不到Service的实例对象. hadoop ...
- 在WCF中使用Flag Enumerations
在WCF中使用Flag Enumerations 请看MSDN示例: [DataContract][Flags] public enum CarFeatures { None = 0, ...
- Entity Framework在WCF中序列化的问题
问题描述 如果你在WCF中用Entity Framework来获取数据并返回实体对象,那么对下面的错误一定不陌生. 接收对 http://localhost:5115/ReService.svc 的 ...
- wcf中的使用全双工通信(转)
wcf中的使用全双工通信 wcf中的契约通信默认是请求恢复的方式,当客户端发出请求后,一直到服务端回复时,才可以继续执行下面的代码. 除了使用请求应答方式的通信外,还可以使用全双工.下面给出例子: 1 ...
- WCF中绑定的简单介绍
绑定基本概念 绑定就是一个从通用基础类型派生出来的运行时类型.绑定中描述了传输协议,消息编码格式和其他的一些用于通信的通信协议. 绑定的种类介绍 类型名 配置文件使用名 描述 BasicHttpBin ...
最新文章
- 梦境交互:做个现代灵媒,考虑一下?
- Python,美国顶尖大学里最受欢迎的编程入门语言
- 下一代编解码标准的抉择
- 51单片机实现4位数以内的加减法
- linux运维需要哪些网络知识,Linux运维学习笔记-网络技术知识体系总结
- 安装oracle 11g时,报启动服务出现错误,找不到OracleMTSRecoveryService的解决方法
- linux 破解版confluence安装
- 开售破发、二手市场跳水 iPhone SE3 “割韭菜”功力大减
- 为什么选择react?为前端开发选择React的六大理由
- 量子位首款周边卫衣上线,给你AI的力量
- 转:libatk-bridge.so错误解决
- php编写 密码检查,php-检查旧密码和新密码的规则
- 1330_硬件测试中的BCI测试
- Excel怎么将两列数据合并成一列
- 5位数的数字黑洞是多少_揭秘数字黑洞6174
- 住房和城乡建设部关于2022年第十批一级建造师注册人员名单的公告
- cdr 表格自动填充文字_6个excel表格制作技巧,熟练掌握,工作效率加倍
- 微信砍价 php,GitHub - YInJunWen/bcwx: vue2+thinkPHP5.1 前后端分离的微信砍价
- PHP 开发与代码审计(总结)
- 高频前端面试问题及答案整理
热门文章
- 最全面计算机英语核心单词分享
- mysql用其他用户登录报错_mysql如何登录创建的用户
- 安卓搞机玩机-什么是“锁 ” BL锁 屏幕锁 账号锁 设备锁等分析
- linux关于系统管理、系统安全命令
- 员工转正申请书_有限公司新员工转正申请书
- magisk卸载内置软件_Win10自带软件怎么卸载 Win10自带软件卸载方法【详细教程】...
- Vue3 异步组件 suspense
- 世界非著名的十大奇迹
- win7无声音显示“未插入扬声器或耳机” 怎么解决
- matlab拼接曲线,贝切尔曲线拼接代码-MATLAB