簡體   English   中英

在回調方向檢查WCF消息?

[英]Inspect WCF Messages in the Callback direction?

我可以分別使用IClientMessageInspector,IDispatchMessageInspector檢查客戶端和服務器端的WCF消息。 但是在雙工通信中,如何在從服務器到客戶端的回調中做到這一點尚不清楚(關於該主題的文檔也不多)。

有關如何實現此功能的任何想法?

最后我得到了解決方案。

在雙工通信方案中,當進行回調時,服務器成為客戶端,反之亦然。

因此,在服務器端實現IServiceBehavior時,使用DispatchRuntime foreach EndpointDispatcher的CallbackClientRuntime屬性注入消息檢查器。

public void ApplyDispatchBehavior(ServiceDescription serviceDescription, System.ServiceModel.ServiceHostBase serviceHostBase)
{
    foreach (ChannelDispatcher item in serviceHostBase.ChannelDispatchers)
    {
        foreach (EndpointDispatcher epd in item.Endpoints)
        {
            //injecting an inspector in normal call
            epd.DispatchRuntime.MessageInspectors.Add(new MessageSizerInspector());

            //injecting an inspector in callback
            epd.DispatchRuntime.CallbackClientRuntime.MessageInspectors.Add(new MessageSizerInspector());
        }
    }
}

在客戶端實現IEndpointBehavior時,使用CallbackDispatchRuntime注入消息檢查器。

public void ApplyClientBehavior(ServiceEndpoint endpoint, System.ServiceModel.Dispatcher.ClientRuntime clientRuntime)
{
    //injecting an inspector in normal call
    clientRuntime.MessageInspectors.Add(new MessageSizerInspector());

    //injecting an inspector in callback
    clientRuntime.CallbackDispatchRuntime.MessageInspectors.Add(new MessageSizerInspector());       
}

然后一如既往地應用擴展名。

在我的例子中,我創建了一個類,如下面的偽代碼

public class MessageSizer : Attribute, IServiceBehavior, IEndpointBehavior
{
    .....
}

然后我將此屬性應用於服務器端檢查的服務實現,並在app.config中添加了behaviorExtensions,以便在客戶端設置端點以進行消息檢查。

<system.serviceModel>
    ...........
    <client>
      <endpoint address="net.tcp://localhost/MinerDual.svc"
            binding="netTcpBinding" bindingConfiguration="wsDualMinerNetTcp"
            contract="WebApplication.IMinerDual" name="NetTcpMinerDual" 
            behaviorConfiguration="Default" />
    </client>
  <behaviors>
    <endpointBehaviors >
      <behavior name="Default">
        <messageSizer/>
      </behavior>
    </endpointBehaviors>
  </behaviors>
  <extensions>
    <behaviorExtensions>
      <add name="messageSizer"
           type="WCFExtensions.MessageSizerElement, WCFExtensions, 
           Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
    </behaviorExtensions>
  </extensions>
</system.serviceModel>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM