gpt4 book ai didi

.net - IEndpointBehavior ApplyClientBehavior 方法在行为添加到端点行为后未执行

转载 作者:行者123 更新时间:2023-12-04 23:54:00 33 4
gpt4 key购买 nike

鉴于这两个类:

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总是空的?

不应该 ApplyClientBehavior当行为被添加到端点行为集合时被执行(我验证它是并且 requestInterceptor 变量不为空)?

最佳答案

就我而言,我使用 wcf for .net core 遇到了这个问题。

在创建 wcf 客户端后设置 EndpointBehaviors 属性时,未调用方法 ApplyClientBehavior。

对我来说有什么技巧:我必须在 wcf 客户端构造函数中设置 EndpointBehaviors 属性。不过,我不能说出这样做的原因,这对我来说根本没有意义,但它确实有效。

如果需要,您可以创建一个新的分部类并使用新的构造函数来注册此行为。如果您需要重新生成服务契约(Contract),这可能很有用。

希望这可以帮助别人。

关于.net - IEndpointBehavior ApplyClientBehavior 方法在行为添加到端点行为后未执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50119448/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com