1. 程式人生 > >WCF雙向通訊netTCP

WCF雙向通訊netTCP

下載 nic json llb call web content sed 客戶

一、服務端配置

技術分享
<?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

五、整解決方案源碼

點擊下載

WCF雙向通訊netTCP