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相关推荐

  1. 在WCF中实现双工通信(转载)

    首先声明此文章是转载博客园蒋老师之作:http://www.cnblogs.com/artech/archive/2007/03/02/661969.html 双工(Duplex)模式的消息交互方式体 ...

  2. WCF技术剖析之十一:异步操作在WCF中的应用(上篇)

    按照操作执行所需的资源类型,我们可以将操作分为CPU绑定型(CPU Bound)操作和I/O绑定型(I/O Bound)操作.对于前者,操作的执行主要利用CPU进行密集的计算,而对于后者,大部分的操作 ...

  3. [转载]我的WCF之旅(3):在WCF中实现双工通信

    http://www.cnblogs.com/artech/archive/2007/03/02/661969.html 双工(Duplex)模式的消息交换方式体现在消息交换过程中,参与的双方均可以向 ...

  4. WCF中的序列化[上篇]

    SOA 和Message Windows Communication Foundation (WCF) 是基于面向服务架构(Service Orientation Architecture--SOA) ...

  5. 数字证书及在WCF中的应用

    一 概念 1.内容 证书的发布机构     证书的有效期     证书所有者(Subject)     签名所使用的算法     指纹以及指纹算法 公钥     私钥 2.存储区 3.有效性 二 作用 ...

  6. 3 weekend110的hadoop中的RPC框架实现机制 + hadoop中的RPC应用实例demo

    hadoop中的RPC框架实现机制 RPC是Remotr Process Call, 进程间的远程过程调用,不是在一个jvm里. 即,Controller拿不到Service的实例对象. hadoop ...

  7. 在WCF中使用Flag Enumerations

    在WCF中使用Flag Enumerations 请看MSDN示例: [DataContract][Flags] public enum CarFeatures {     None = 0,     ...

  8. Entity Framework在WCF中序列化的问题

    问题描述 如果你在WCF中用Entity Framework来获取数据并返回实体对象,那么对下面的错误一定不陌生. 接收对 http://localhost:5115/ReService.svc 的 ...

  9. wcf中的使用全双工通信(转)

    wcf中的使用全双工通信 wcf中的契约通信默认是请求恢复的方式,当客户端发出请求后,一直到服务端回复时,才可以继续执行下面的代码. 除了使用请求应答方式的通信外,还可以使用全双工.下面给出例子: 1 ...

  10. WCF中绑定的简单介绍

    绑定基本概念 绑定就是一个从通用基础类型派生出来的运行时类型.绑定中描述了传输协议,消息编码格式和其他的一些用于通信的通信协议. 绑定的种类介绍 类型名 配置文件使用名 描述 BasicHttpBin ...

最新文章

  1. 梦境交互:做个现代灵媒,考虑一下?
  2. Python,美国顶尖大学里最受欢迎的编程入门语言
  3. 下一代编解码标准的抉择
  4. 51单片机实现4位数以内的加减法
  5. linux运维需要哪些网络知识,Linux运维学习笔记-网络技术知识体系总结
  6. 安装oracle 11g时,报启动服务出现错误,找不到OracleMTSRecoveryService的解决方法
  7. linux 破解版confluence安装
  8. 开售破发、二手市场跳水 iPhone SE3 “割韭菜”功力大减
  9. 为什么选择react?为前端开发选择React的六大理由
  10. 量子位首款周边卫衣上线,给你AI的力量
  11. 转:libatk-bridge.so错误解决
  12. php编写 密码检查,php-检查旧密码和新密码的规则
  13. 1330_硬件测试中的BCI测试
  14. Excel怎么将两列数据合并成一列
  15. 5位数的数字黑洞是多少_揭秘数字黑洞6174
  16. 住房和城乡建设部关于2022年第十批一级建造师注册人员名单的公告
  17. cdr 表格自动填充文字_6个excel表格制作技巧,熟练掌握,工作效率加倍
  18. 微信砍价 php,GitHub - YInJunWen/bcwx: vue2+thinkPHP5.1 前后端分离的微信砍价
  19. PHP 开发与代码审计(总结)
  20. 高频前端面试问题及答案整理

热门文章

  1. 最全面计算机英语核心单词分享
  2. mysql用其他用户登录报错_mysql如何登录创建的用户
  3. 安卓搞机玩机-什么是“锁 ” BL锁 屏幕锁 账号锁 设备锁等分析
  4. linux关于系统管理、系统安全命令
  5. 员工转正申请书_有限公司新员工转正申请书
  6. magisk卸载内置软件_Win10自带软件怎么卸载 Win10自带软件卸载方法【详细教程】...
  7. Vue3 异步组件 suspense
  8. 世界非著名的十大奇迹
  9. win7无声音显示“未插入扬声器或耳机” 怎么解决
  10. matlab拼接曲线,贝切尔曲线拼接代码-MATLAB