代码之家  ›  专栏  ›  技术社区  ›  Andrew Shepherd

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

  •  3
  • Andrew Shepherd  · 技术社区  · 16 年前

    我正在尝试将自定义行为插入到我的服务客户机中,如下示例所示 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/extensions/behaviorextensions。 参数名称:元素(C:\documents 和设置\Andrew Shepherd\my 文档\ Visual Studio 2008\projects\wcfpractice\chatclient\bin\debug\chatclient.vshost.exe.config 第5行)

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

    2 回复  |  直到 15 年前
        1
  •  0
  •   x0n    16 年前

    这是一个有点随意的想法,但可能不是:颠倒配置中元素的顺序,这样扩展就出现了 之前 行为。

    -奥辛

        2
  •  0
  •   Andrew Shepherd    16 年前

    结果发现我没有完全正确地获得程序集限定名。 程序集限定名的正确性足以加载.NET框架,但在匹配行为配置时,WCF框架将逐字符执行原始比较。

    为了最终获得确切的类型名,我编写了代码来创建 客户端日志端点行为扩展 对象,并写入 AssemblyQualifiedName 属性设置为局部变量,然后将其从调试窗口复制并粘贴到.config文件中。

    我必须这样做,这在WCF框架中被认为是一个bug。 (见 this link ) 显然它是固定在.NET 4.0中的。

    也看到 this article.

    推荐文章