通过.config文件设置自定义WCF绑定行为 - 为什么这不起作用?

时间:2010-05-30 23:24:27

标签: wcf wcf-binding wcf-behaviour

我正在尝试按照示例here.

将自定义行为插入我的服务客户端

我似乎正在执行所有步骤,但我得到的是ConfigurationErrorsException。有没有比我更有经验的人可以发现我做错了什么?

这是整个app.config文件。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.serviceModel>
        <behaviors>
            <endpointBehaviors>
                <behavior name="ClientLoggingEndpointBehaviour">
                    <myLoggerExtension />
                </behavior>
            </endpointBehaviors>
        </behaviors>
        <extensions>
            <behaviorExtensions>
                <add name="myLoggerExtension"
                     type="ChatClient.ClientLoggingEndpointBehaviourExtension, ChatClient, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"/>
            </behaviorExtensions>
        </extensions>
        <bindings>
        </bindings>
        <client>
            <endpoint
                behaviorConfiguration="ClientLoggingEndpointBehaviour"
                name="ChatRoomClientEndpoint"
                address="http://localhost:8016/ChatRoom"
                binding="wsDualHttpBinding"
                contract="ChatRoomLib.IChatRoom"
                />
        </client>
    </system.serviceModel>
</configuration>

以下是异常消息:

  

创建时出错   配置节处理程序   system.serviceModel /行为:   扩展元素'myLoggerExtension'   无法添加到此元素。   验证扩展名是否正确   在扩展集合中注册   在   system.serviceModel /扩展/ behaviorExtensions。   参数名称:element(C:\ Documents   和设置\安德鲁牧羊人\我的   Documents \ Visual Studio   2008 \项目\ WcfPractice \ ChatClient \ BIN \调试\ ChatClient.vshost.exe.config   第5行

我知道我已正确编写了对ClientLoggingEndpointBehaviourExtensionobject的引用,因为通过调试器我可以看到它被实例化。

2 个答案:

答案 0 :(得分:0)

这是一个随意的想法,但可能不是:颠倒配置中元素的顺序,以便在行为之前扩展

-Oisin

答案 1 :(得分:0)

事实证明,我没有得到装配合格的名称。 程序集限定名称对于.NET框架的加载是正确的,但是在匹配行为配置时,WCF框架会执行一个天真的逐字符比较。

为了最终获得确切的类型名称,我编写了代码来创建 ClientLoggingEndpointBehaviourExtension 对象的实例,并将AssemblyQualifiedName属性写入局部变量,然后我将其复制 - 和 - 从调试窗口粘贴到.config文件中。

我不得不做这一切被认为是WCF框架中的一个错误。 (见this link) 显然,它已在.NET 4.0中修复。

另见this article.