gpt4 book ai didi

c# - 如何在 WCF 服务中使用 IDispatchMessageInspector?

转载 作者:可可西里 更新时间:2023-11-01 08:23:54 25 4
gpt4 key购买 nike

我正在尝试使用 IDispatchMessageInspector在 WCF 服务实现中访问自定义 header 值。

类似于:

public class MyService : IMyService
{
public List<string> GetNames()
{
var headerInspector = new CustomHeaderInspector();

// Where do request & client channel come from?
var values = headerInspector.AfterReceiveRequest(ref request, clientChannel, OperationContext.Current.InstanceContext);
}
}

我已经实现了自己的 IDispatchMessageInspector 类。

public class CustomHeaderInspector : IDispatchMessageInspector
{
public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
{
var prop = (HttpRequestMessageProperty)request.Properties[HttpRequestMessageProperty.Name];
var userName = prop.Headers["Username"];

return userName;
}
}

如何通过

  • System.ServiceModel.Channels.消息

  • System.ServiceModel.IClientChannel

AfterReceiveRequest 从服务实现调用

编辑:

很多文章喜欢this onethis one ,举例说明如何实现您自己的 ServiceBehavior。所以你的服务实现看起来像这样:

[MyCustomBehavior]
public class MyService : IMyService
{
public List<string> GetNames()
{
// Can you use 'MyCustomBehavior' here to access the header properties?
}
}

因此,我能否在服务操作方法中以某种方式访问​​ MyCustomBehavior 以访问自定义 header 值?

最佳答案

你必须配置

<extensions>
<behaviorExtensions>
<add
name="serviceInterceptors"
type="CustomHeaderInspector , MyDLL, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"
/>
</behaviorExtensions>
</extensions>

然后扩展将在您的 WCF 堆栈中处理。服务本身没有 serviceInterceptors 的概念,您不必像在第一个代码块中那样做。 WCF 堆栈将为您注入(inject) Inspector。

MSDN: system.servicemodel.dispatcher.idispatchmessageinspector

关于c# - 如何在 WCF 服务中使用 IDispatchMessageInspector?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24213782/

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