Cuối cùng tôi nhận được giải pháp.
Trong trường hợp giao tiếp song công khi gọi lại được thực hiện, máy chủ sẽ trở thành ứng dụng khách và ngược lại.
Vì vậy, ở phía máy chủ khi triển khai IServiceBehavior, hãy tiêm trình kiểm tra thư bằng cách sử dụng thuộc tính CallbackClientRuntime của DispatchRuntime foreach EndpointDispatcher.
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());
}
}
}
Phía máy khách khi thực thi IEndpointBehavior sẽ truyền thanh tra thư bằng cách sử dụng 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());
}
Sau đó, áp dụng tiện ích mở rộng như mọi khi.
Trong trường hợp của tôi, tôi tạo ra một lớp học như mã giả sau
public class MessageSizer : Attribute, IServiceBehavior, IEndpointBehavior
{
.....
}
sau đó tôi áp dụng thuộc tính này để phục vụ thực hiện cho máy chủ kiểm tra bên và thêm một behaviorExtensions bên trong app.config để thiết lập các thiết bị đầu cuối để kiểm tra tin nhắn ở phía khách hàng.
<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>
Tôi cũng đang gặp phải vấn đề tương tự. – Anuraj