3

我正在尝试按照此处的示例将自定义行为插入到我的服务客户端中。

我似乎正在遵循所有步骤,但我得到了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/behaviors 创建配置部分处理程序时出错:扩展元素“myLoggerExtension”无法添加到此元素。验证扩展是否已在 system.serviceModel/extensions/behaviorExtensions 的扩展集合中注册。参数名称:元素(C:\Documents and Settings\Andrew Shepherd\My Documents\Visual Studio 2008\Projects\WcfPractice\ChatClient\bin\Debug\ChatClient.vshost.exe.config 第5行)

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

4

2 回答 2

0

这是一个随机的想法,但也许不是:颠倒配置中元素的顺序,以便扩展出现行为之前。

-Oisin

于 2010-05-30T23:35:41.233 回答
0

事实证明,我没有完全正确地获得程序集限定名称。程序集限定名称对于 .NET 框架加载是足够正确的,但是 WCF 框架在匹配行为配置时会执行简单的逐字符比较。

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

我必须做这一切被认为是 WCF 框架中的一个错误。(请参阅此链接)显然它已在 .NET 4.0 中修复。

另见这篇文章。

于 2010-05-31T01:12:35.397 回答