レガシ .Net Remoting サービスを WCF に移行中です。この件についてしばらく読んだ後、このメタデータの話と、クライアント上で動的にプロキシを構築することに出くわしました。有望に思えました。
私が達成したかったのは、可能であれば、最小限の構成で (つまり、構成<services>
ファイルに明示的なノードがない) 1 つの Web アプリケーションでサービスを公開し、最小限の構成で (インターフェイスを共有することによって) クライアントでプロキシを構築することです。 .
デフォルトですべてのサービスのメタデータを公開できることは知っていますが、これが機能しているように見える方法は、サービスごとに異なる URL を生成し、クライアントでハードコーディングされた数十の文字列を維持する必要があるため、役に立たないようです。
これは私の現在の設定ファイルです:
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
'http://localhost/VirtualDir
サーバー上に 1 つの URL (おそらくベース アドレス自体) を設定し、このエンドポイントを使用して、クライアントからのサービス インターフェイスを自動的に解決したいと考えていました。このやや古い投稿に出くわしました。これは多かれ少なかれ私が達成したいことです。当時、それを優雅に行う方法はないように思われました。
おそらく、サーバー上で単一の MEX エンドポイントを公開し、その上のコントラクト インターフェイスを解決する方法はありませんか? このようにして、次のことができるようになります。
- クライアントに単一の URL を保存する
MetadataResolver
特定のインターフェイスのクラスを使用してエンドポイントを取得するChannelFactory<T>
解決されたエンドポイントを使用してプロキシを作成します
これをある種のファクトリ クラス内で実行し、Unity IoC コンテナーで使用したいと考えました。
既知の形式を使用して多くの実際のエンドポイント アドレスを構築する何らかの規則を使用して、これを機能させることができると思います。それでも問題が発生する可能性があるため、それは避けたいと思います。