如何将自定义 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"
所以我有两个主要问题:
- 我不确定为什么在配置文件中有两个名称,一个是 class 或行为名称,第二个是程序集名称?
- 我做错了什么?
这是我的命名空间:
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 路径中)。
我正在尝试实现我自己的自定义行为版本: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"
所以我有两个主要问题:
- 我不确定为什么在配置文件中有两个名称,一个是 class 或行为名称,第二个是程序集名称?
- 我做错了什么?
这是我的命名空间:
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 路径中)。