WCF双向通讯netTCP

一、服务端配置

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.serviceModel>
        <behaviors>
            <serviceBehaviors>
                <behavior name="MyBehavior">
                    <serviceMetadata httpGetEnabled="true" />
                    <serviceDebug includeExceptionDetailInFaults="false" />
                </behavior>
            </serviceBehaviors>
          <endpointBehaviors>
            <behavior name="webBehavior">
              <webHttp />
            </behavior>
          </endpointBehaviors>
        </behaviors>
        <services>
            <service name="PayCommunicationWcf.Server.AliPay" >
                <endpoint address="" binding="netTcpBinding"  contract="PayCommunicationWcf.Interface.IPay">
                    <identity>
                     <!--   <dns value="localhost" />-->
                    </identity>
                </endpoint>
              <!--  <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"  />
              -->  <host>
                    <baseAddresses>
                        <add baseAddress="net.tcp://localhost:57000/sessionservice" />
                    </baseAddresses>
                </host>
            </service>
        </services>
    <bindings>

      <webHttpBinding>
        <binding name="ApiExportBinding" maxReceivedMessageSize="10485760"
                 maxBufferPoolSize="10485760" maxBufferSize="10485760" closeTimeout="00:03:00"
                 openTimeout="00:03:00" receiveTimeout="00:10:00" sendTimeout="00:03:00">
          <readerQuotas maxDepth="32" maxStringContentLength="10485760"
                        maxArrayLength="10485760" maxBytesPerRead="10485760" />
          <security mode="None" />
        </binding>
      </webHttpBinding>
    </bindings>
    </system.serviceModel>
</configuration>

二、服务端服务契约和服务实现

1、服务实现

using System;
using PayCommunicationWcf.Interface;
using PayCommunicationWcf.Model;
using PurClient.Logging;

namespace PayCommunicationWcf.Server
{
    public class PayCallBack : IPayCallBack
    {
        public void SendResultOfPay(PayResultResponse result)
        {

           Logger.GetInstance().Info(string.Format("已经接收到服务端发来的支付结果消息,结果码:{0},结果信息:{1}。",result.Resultcode, result.Msg));

        }
    }
}

2、服务契约

服务契约

using System.ServiceModel;
using System.ServiceModel.Web;
using PayCommunicationWcf.Model;

namespace PayCommunicationWcf.Interface
{
    [ServiceContract(CallbackContract = typeof(IPayCallBack))]
    public interface IPay
    {
       /* [WebInvoke(UriTemplate = "PayRequestTest", BodyStyle = WebMessageBodyStyle.Bare,Method = "*",RequestFormat =WebMessageFormat.Json,ResponseFormat = WebMessageFormat.Json)]
      */  [OperationContract]
        PayResultResponse  PayRequestTest(PayRequestInfo payData);
      /*  [WebInvoke(UriTemplate = "PayRequest?payData={payData}", BodyStyle = WebMessageBodyStyle.Bare, Method = "*", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
  */      [OperationContract]
        string PayRequest(string payData);
    }
}

回调服务契约,在客户端中实现

using System.ServiceModel;
using PayCommunicationWcf.Model;

namespace PayCommunicationWcf.Interface
{
    [ServiceContract]
    public interface IPayCallBack
    {
        [OperationContract(IsOneWay = true)]
        void SendResultOfPay(PayResultResponse result);
    }
}

3、服务注册

using System.ServiceModel;

namespace PayCommunicationWcf.Server
{
    public static class ServiceRegister
    {
        /// <summary>
        /// 通过反射注册服务
        /// </summary>
        public static void RegisterAllService()
        {

            ServiceHost host = new ServiceHost(typeof(AliPay));

                if (host.State != CommunicationState.Opening)
                    host.Open();

        }

    }
}

三 、客户端配置

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <client>
      <endpoint address="net.tcp://182.150.28.182:57000/sessionservice" binding="netTcpBinding"
                bindingConfiguration="" contract="PayCommunicationWcf.Interface.IPay"
                name="sessionservice" />
    </client>
    <bindings>
      <netTcpBinding>
        <binding>
          <security mode="None">
          </security>
        </binding>
      </netTcpBinding>
    </bindings>
  </system.serviceModel>
</configuration>

四、客户端实现

1、回调契约实现

using System;
using PayCommunicationWcf.Interface;
using PayCommunicationWcf.Model;
using PurClient.Logging;

namespace PayCommunicationWcf.Server
{
    public class PayCallBack : IPayCallBack
    {
        public void SendResultOfPay(PayResultResponse result)
        {

           Logger.GetInstance().Info(string.Format("已经接收到服务端发来的支付结果消息,结果码:{0},结果信息:{1}。",result.Resultcode, result.Msg));

        }
    }
}

2、客户端创建

private static IPay Channel
        { get; set; }

        private static IPayCallBack Callback
        { get; set; }

 private void FormMain_Load(object sender, EventArgs e)
        {

            var  logger = Logger.GetInstance(); ;
            logger.DelShowUiLogEvent += Loger_DelShowUiLogEvent;
            Callback = new PayCallBack();
            Channel = new DuplexChannelFactory<IPay>(Callback, "sessionservice").CreateChannel();
            //  ServiceRegister.RegisterAllService();
            logger.Info("初始化完成。");

        }

五、整解决方案源码

点击下载

时间: 2024-10-28 19:59:43

WCF双向通讯netTCP的相关文章

silverlight与wcf双向通讯 例子

本文将建立一个silverlight与wcf双向通讯的简单实例,以下是详细步骤: 新建Silverlight应用程序,名称WCFtest.解决方案中添加WCF服务应用程序,名称WcfServiceTest,WCF服务将不再寄宿在Web中. 删除VS自动生成的IService1.cs和Service1.svc文件,修改WCF服务固定端口12345. 在WCF服务应用程序WcfServiceTest上,添加应用,选择浏览定位到 C:\Program Files\Microsoft SDKs\Silv

重温WCF之数单向通讯、双向通讯(五)

1.启用单向通讯的方法,不能有返回值(void可以),不能有out参数,只允许传入参数. [ServiceContract(Namespace = "MyNamespace")] public interface IService { [OperationContract(IsOneWay = true)] void DoTestWork(string message); } 2.双向通讯是有问必有答的(哪怕方法返回void,客户端也会收到一条空消息). [ServiceContrac

我们一起学习WCF 第四篇单通讯和双向通讯

前言:由于个人原因很久没有更新这个系列了,我会继续的更新这系列的文章.这一章是单向和双向通讯.所谓的单向就是只有发送却没有回复,双向是既有发送还有回复.就是有来无往代表单向,礼尚往来表示双向.下面我用一个简单用例图表示一下(其中一个老师很严厉说的话大家都默默接受,另一个则相反) 首先我们先看单向通讯: 第一步:编写服务协定 1 [ServiceContract(Namespace = "singleTrans")] 2 public interface ITeacher 3 { 4 [

三十、【C#.Net开发框架】WCFHosting服务主机的利用WCF服务通讯和实现思路

回<[开源]EFW框架系列文章索引>        EFW框架源代码下载V1.3:http://pan.baidu.com/s/1c0dADO0 EFW框架实例源代码下载:http://pan.baidu.com/s/1eQCc69G        前言:以前的系统都是直接客户端直连数据库服务器,后来考虑到服务器的安全性.数据库连接数的限制.分布能力差等问题,特别是那几年中间件.SOA.ESB等炒得比较火,为了跟上时代脚本有必要开发一个中间件,把后台逻辑业务在中间件中运行.刚开始考虑过WebS

iPhone 和 iPad的ios 开发中 利用 WebViewJavascriptBridge组件,通过 UIWebView 对Html进行双向通讯

本文转载至 http://blog.csdn.net/remote_roamer/article/details/7261490 WebViewJavascriptBridge 项目的 官网 https://github.com/marcuswestin/WebViewJavascriptBridge 主要过程: 下载WebViewJavascriptBridge.h 和 WebViewJavascriptBridge.m文件到自己的项目中,并添加到项目. 在相应的.h文件中 使用#import

lis双向通讯技术

主机与检测仪器进行通讯,最基本的就是能够获取仪器传输出来的检验结果信息.而双向通讯除了可以获取仪器传输的检验结果信息,还可以接收和处理仪器传输的其它多种信息,还能主动发送信息或命令给仪器,设置仪器运行参数或控制仪器进行检测. 检验技师在检验过程中,设置检验项目和保证样本与结果的正确对应占用了很多工作量,并且容易出错.如果主机与HIS有良好的接口,并且仪器支持条码,采用双向+条码可以极大的减轻检验技师设置样本号和检验项目的工作量,并且更能保证样本与结果的正确对应关系. 传统的检验流程是这样的: 标

WCF学习笔记(2)-WCF的通讯过程

一.WCF中的ABC 场景:公司让你送一份合同文件,送文件的过程你可以选择的交通方式有打的,地铁或公交. 到了对方公司后,你要找到某负责人,并且要一份收到合同文件的回执和相应文件 要完成这项工作任务主要以下几个步骤 1.知道对方公司的地址 即WCF中的A,通过Address我们可以找到我们要调用的WCF服务 2.选择交通方式 即WCF中的B,通过Binding来实现Client和Service通讯的所有底层细节. 传输采用什么编码,传输使用什么协议,等等 3.到了对方公司我们能做哪些事 即WCF

基于grpc的流式方式实现双向通讯(python)

grpc介绍 grpc是谷歌开源的一套基于rpc实现的通讯框架(官网有更完整的定义).在搞懂grpc之前,首先要弄懂rpc是什么.下面是自己理解的rpc定义,若有不对,望指出: rpc官方称为 远程过程调用 .我这里理解为远程函数调用,即一个本机程序调用另一个机器的程序中的某个函数.因不是同一机器调用,故需要远程访问操作. 与远程过程调用相反的则是"近程过程调用"(哈哈,自己乱起的).其实就是实现和调用都在同一个机器的程序中.比如,学过面向对象语言的(如java)可以解释为:一个类中实

wcf双工通讯遇到的问题

1.向ChannelFactory提供的InstanceContext包含未实现CallbackContractType的问题 通过添加服务引用生成的客户端代码, public class CallbackHandler : ICalculatorDuplexCallback 这里的接口必须是添加服务引用添加出来的,using Client.ServiceReference1; 2.“在消息传输完成以前关闭会话” 这个问题是在测试的时候发现的,我在测试代码里也写了注释.分析过后发现,原来我们将p