अंत में मुझे समाधान मिल गया।
डुप्लेक्स कॉम्यूनिकेशन परिदृश्य में जब कॉलबैक बनाया जाता है तो सर्वर क्लाइंट बन जाता है और इसके विपरीत।
इसलिए 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>
स्रोत
2012-04-28 02:03:02
मुझे भी एक ही समस्या का सामना करना पड़ रहा है। – Anuraj