5

初期化するために拡張されたクラスを使用して、WCF サービスにカスタム エンドポイント動作を追加してBehaviorExtensionElementいます。私のweb.configでは、次を追加して動作拡張を登録します。

<system.serviceModel>
    <services>
      <service name="Service.MyService">
        <endpoint address=""
                  behaviorConfiguration="endpointBehavior"
                  binding="basicHttpBinding"
                  contract="Contracts.IMyService"/>
      </service>
    </services>

    <behaviors>
      <endpointBehaviors>
        <behavior name="endpointBehavior">
          <logBehavior />
        </behavior>
      </endpointBehaviors>
    </behaviors>

    <extensions>
      <behaviorExtensions>
        <add name="logBehavior"
             type="MyNamespace.MyBehaviorExtensionElement, MyAssembly, Version=0.0.0.1, Culture=neutral, PublicKeyToken=null" />
      </behaviorExtensions>
    </extensions>
</system.serviceModel>

これはまったく問題なく動作しますが、アセンブリをロードするには、アセンブリのバージョンを指定する必要があります。MyNamespace.MyBehaviorExtensionElement, MyAssemblyバージョン/カルチャ/トークンなしでアセンブリ参照を変更すると、サービスは次のエラーで起動に失敗します。

説明: この要求を処理するために必要な構成ファイルの処理中にエラーが発生しました。以下の特定のエラーの詳細を確認し、構成ファイルを適切に変更してください。

パーサー エラー メッセージ: system.serviceModel/behaviors の構成セクション ハンドラーの作成中にエラーが発生しました: 拡張要素 'logBehavior' をこの要素に追加できません。拡張機能が、system.serviceModel/extensions/behaviorExtensions の拡張コレクションに登録されていることを確認します。パラメータ名:要素

アセンブリ バージョンの最終部分は、ビルド プロセスの一環として頻繁に変更されます。web.configビルド バージョンがインクリメントされるたびに (数百回になる可能性があります)、新しいバージョン番号で を更新し続ける必要がないようにするにはどうすればよいですか?

4

1 に答える 1

3

完全に指定されたクラス名の制限は、.net 4 以降で削除されたと思います。やってみました:

  <behaviorExtensions>
     <add name="logBehavior"
         type="MyNamespace.MyBehaviorExtensionElement, MyAssembly" />
  </behaviorExtensions>

私は間違っているかもしれません!

于 2012-11-26T15:09:47.347 に答える