鉴于这两个类:
public class InspectorBehavior : IEndpointBehavior
{
public MessageInspector MessageInspector;
public void AddBindingParameters(ServiceEndpoint endpoint, System.ServiceModel.Channels.BindingParameterCollection bindingParameters){}
public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher){}
public void Validate(ServiceEndpoint endpoint){}
public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
{
MessageInspector = new MessageInspector();
clientRuntime.MessageInspectors.Add(MessageInspector);
}
}
public class MessageInspector : IClientMessageInspector
{
public string LastRequestXML { get; private set; }
public string LastResponseXML { get; private set; }
public void AfterReceiveReply(ref System.ServiceModel.Channels.Message reply, object correlationState)
{
LastResponseXML = reply.ToString();
}
public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel)
{
LastRequestXML = request.ToString();
return request;
}
}
这个行为初始化代码:
var requestInterceptor = new InspectorBehavior();
MYSoapClient.Endpoint.Behaviors.Add(requestInterceptor);
为什么永远不会执行ApplyClientBehavior
方法而且MessageInspector
始终为空?
当行为被添加到Endpoint Behavior集合时,不应该执行ApplyClientBehavior
(我确认它是,而且requestInterceptor变量不为null)?
答案 0 :(得分:0)
以我为例,我使用wcf来安装.net内核。
创建wcf客户端后设置EndpointBehaviors属性时,未调用ApplyClientBehavior方法。
对我来说,诀窍是:我必须在wcf客户端构造函数中设置EndpointBehaviors属性。我无法说出这样做能达到目的的原因,这对我来说根本没有意义,但确实有效。
如果需要,您可以创建一个新的部分类并具有一个新的构造函数来注册此行为。如果您需要重新生成服务合同,这可能会很有用。
希望这可以帮助其他人。