Настройка пользовательского поведения привязки WCF через файл .config - почему это не работает? - PullRequest
3 голосов
/ 31 мая 2010

Я пытаюсь вставить пользовательское поведение в мой сервисный клиент, следуя приведенному ниже примеру .

Кажется, я выполняю все шаги, но получаю 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. Имя параметра: элемент (C: \ Documents и настройки \ Андрей Шепард \ Мой Документы \ Visual Studio 2008 \ Projects \ WcfPractice \ ChatClient \ Bin \ Debug \ ChatClient.vshost.exe.config строка 5)

Я знаю, что правильно написал ссылку на объект ClientLoggingEndpointBehaviourExtensionobject, потому что через отладчик я вижу, как он создается.

Ответы [ 2 ]

0 голосов
/ 31 мая 2010

Оказывается, я не совсем правильно понял название сборки. Полное имя сборки было достаточно правильным для загрузки .NET Framework, но затем платформа WCF выполняет наивное символьное сравнение при сопоставлении конфигураций поведения.

Чтобы наконец получить точное имя типа, я написал код для создания экземпляра объекта ClientLoggingEndpointBehaviourExtension и записал свойство AssemblyQualifiedName в локальную переменную, которую затем скопировал вставляется из окна отладки в файл .config.

То, что я должен был сделать все это, считается ошибкой в ​​структуре WCF. (См. эту ссылку ) По-видимому, это исправлено в .NET 4.0.

Также см. эту статью.

0 голосов
/ 31 мая 2010

Это немного случайная мысль, но, возможно, нет: измените порядок элементов в вашей конфигурации, чтобы расширения пришли до поведения.

-Oisin

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...