gpt4 book ai didi

wcf - 在 IClientMessageInspector 和 IParameterInspector 之间同步相关状态

转载 作者:行者123 更新时间:2023-12-03 15:03:57 24 4
gpt4 key购买 nike

我有一个 wcf 客户端。根据要求,我需要记录请求中的一些元数据(以及请求中未包含的用户数据)。然后,如果请求成功,我可能必须记录响应元数据,并根据标志,完整的肥皂请求。

我正在尝试以正确的方式执行此操作(使用 IParameterInspector 检查元数据并使用 IClientMessageInspector 获取 Soap),但我无法关联两个接口(interface)请求。我不确定这里的线程安全。这是我所在位置的精简版...

     public class SoapRequestInfo
{
public string UserId { get; set; }
public Guid Key { get; set; }
//would contain a lot more info
}

public class OperationProfilerParameterInspector : IParameterInspector, IClientMessageInspector
{
//before serialization
public object BeforeCall(string operationName, object[] inputs) //IParameterInspector
{
//Add the operation, record some specific inputs to db
return new SoapRequestInfo
{
UserId = "1234",
Key = new Guid()
};
}

public void AfterCall(string operationName, object[] outputs, object returnValue, object correlationState) //IParameterInspector
{
var info = correlationState as SoapRequestInfo;
//Do some additional logging - easy enough
}

public object BeforeSendRequest(ref Message request, IClientChannel channel) //IClientMessageInspector
{
//want to correlate this with IParameterInspector
return null;
}


public void AfterReceiveReply(ref Message reply, object correlationState) //IClientMessageInspector
{
//May want to log full soap message depending on after call criteria
}
}

我知道我不能使用私有(private)变量来保存 Guid。我不能使用 session ,因为可能有多个请求连续出现并且不能保证响应是正确的。那么如何才能唯一标识两个接口(interface)之间的correlationState呢?

最佳答案

如果您的服务在 ASPNET 兼容模式下运行,您可能可以使用 HttpContext.Items 来保留您的对象,否则您可以使用 TLS(线程本地存储),将数据放入插槽并稍后获取/清除。

关于wcf - 在 IClientMessageInspector 和 IParameterInspector 之间同步相关状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14073402/

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