Jua*_*gui 8 wcf duplex-channel
我可以分别使用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());
}
}
}
Run Code Online (Sandbox Code Playgroud)
在客户端实现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());
}
Run Code Online (Sandbox Code Playgroud)
然后一如既往地应用扩展名.
在我的例子中,我创建了一个类,如下面的伪代码
public class MessageSizer : Attribute, IServiceBehavior, IEndpointBehavior
{
.....
}
Run Code Online (Sandbox Code Playgroud)
然后我将此属性应用于服务器端检查的服务实现,并在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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
860 次 |
| 最近记录: |