zoukankan      html  css  js  c++  java
  • 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>
    View Code

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

     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));
              
            }
        }
    }
    View Code

    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);
        }
    }
    View Code

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

    using System.ServiceModel;
    using PayCommunicationWcf.Model;
    
    namespace PayCommunicationWcf.Interface
    {
        [ServiceContract]
        public interface IPayCallBack
        {
            [OperationContract(IsOneWay = true)]
            void SendResultOfPay(PayResultResponse result);
        }
    }
    View Code

    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();
                
            }
    
    
        }
    }
    View Code

    三 、客户端配置

    <?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>
    View Code

    四、客户端实现

    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));
              
            }
        }
    }
    View Code

    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("初始化完成。");
    
            }
    View Code

     五、整解决方案源码

    点击下载

  • 相关阅读:
    调试D2JS
    PG 中 JSON 字段的应用
    面试----
    机器学习面试题
    闭包和装饰器
    scss-混合@mixin @include @function
    scss基本使用及操作函数
    常用的scss函数(mixin)
    二叉搜索树基本操作实现
    判断一棵树是否是二叉搜索树
  • 原文地址:https://www.cnblogs.com/musexiaoluo/p/7237045.html
Copyright © 2011-2022 走看看