如何将自定义 WCF 行为扩展添加到 machine.config

How to add custom WCF behavior extension to machine.config

我正在尝试实现我自己的自定义行为版本:Using Windows Credentials in WCF-Custom adapter 在这里:Impersonate WCF Credentials when calling a WCF Service

BizTalk 要求所有内容都放在 GAC 中,我通过 运行 GacUtil 做到了这一点。

我尝试对 machine.config 进行以下更改,但我知道它们不起作用,因为如果我重新启动 BizTalk 主机实例,我会收到奇怪的错误。

由此改变:

  <section name="extensions" type="System.ServiceModel.Configuration.ExtensionsSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>

为此:

  <section name="extensions" type="System.ServiceModel.Configuration.ExtensionsSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <add name="WindowsCredentialsBehaviour" type="MyApp.Biztalk.WCF.Extensions.ImpersonateBasicCredentialsBehaviour, MyApp.CustomEndpointBehavior, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b12735283a466be4" />
  </section>

在 BizTalk 中,程序集如下所示:

MyApp.CustomEndpointBehavior, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b12735283a466be4"

所以我有两个主要问题:

  1. 我不确定为什么在配置文件中有两个名称,一个是 class 或行为名称,第二个是程序集名称?
  2. 我做错了什么?

这是我的命名空间:

namespace MyApp.Biztalk.WCF.Extensions
{
    public class ImpersonateBasicCredentialsBehaviour : IEndpointBehavior
...
namespace MyApp.Biztalk.WCF.Extensions
{
    public class ImpersonateBasicCredentialsBehaviourElement : BehaviorExtensionElement
...

我也试过用SDK工具编辑machine.config:SvcConfigEditor.exe,但是报错,只好在NotePad++中编辑。

您不需要定义您的部分(它已经被定义)。相反,您只需在机器级别配置中配置您的扩展:

<system.serviceModel>
    <extensions>
        <behaviorExtensions>
            <add name="WindowsCredentialsBehaviour" type="MyApp.Biztalk.WCF.Extensions.ImpersonateBasicCredentialsBehaviour, Asurion.CustomEndpointBehavior" />
        </behaviorExtensions>
    </extensions>
</system.serviceModel>

然后它将与任何使用 WCF 的应用程序配置文件合并 (system.serviceModel)。您只需要确保类型 MyApp.Biztalk.WCF.Extensions.ImpersonateBasicCredentialsBehaviour 在要使用 WCF 的应用程序可用的程序集中(在 GAC 中或在私有 bin 路径中)。