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

これは少しランダムな考えですが、そうではないかもしれません。構成内の要素の順序を逆にして、拡張機能が動作の前に来るようにします。

-オシーン

于 2010-05-30T23:35:41.233 に答える
0

アセンブリ修飾名が正確に正しく取得されていないことがわかりました。アセンブリ修飾名は、.NET フレームワークが読み込むのに十分なほど正確でしたが、WCF フレームワークは、動作構成を照合するときに単純な文字単位の比較を実行します。

最終的に正確な型名を取得するために、ClientLoggingEndpointBehaviourExtensionオブジェクトのインスタンスを作成するコードを作成し、 AssemblyQualifiedNameプロパティをローカル変数に書き込み、それをデバッグ ウィンドウから .config ファイルにコピー アンド ペーストしました。

これをすべてやらなければならなかったのは、WCF フレームワークのバグと見なされます。(このリンクを参照してください) .NET 4.0 で修正されたようです。

こちらの記事もご覧ください。

于 2010-05-31T01:12:35.397 に答える