8
我可以分別使用IClientMessageInspector,IDispatchMessageInspector檢查客戶端和服務器端的WCF消息。但在Duplex通信中,不清楚如何在從服務器到客戶端的回調中執行此操作(關於該主題的文檔也不多)。檢查回調方向的WCF消息?
有關如何實現此功能的任何想法?
我可以分別使用IClientMessageInspector,IDispatchMessageInspector檢查客戶端和服務器端的WCF消息。但在Duplex通信中,不清楚如何在從服務器到客戶端的回調中執行此操作(關於該主題的文檔也不多)。檢查回調方向的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
{
.....
}
然後我申請這個屬性以服務爲執行服務器端檢查 類,並增加了behaviorExtensions在app.config裏面設置端點用於客戶端的消息檢查。
<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>
我也面臨同樣的問題。 – Anuraj 2012-04-26 09:58:33