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
{
.....
}
같은 클래스를 생성 및 설정에의 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>
나는 또한 동일한 문제에 직면하고있다. – Anuraj