Visual Studioで参照の追加を使用せずに、プロジェクトにサービス参照を動的に追加できますか?メタデータのWsdlインポートは、この目標を達成するのに役立ちますか?誰かがサービスを動的にロードしてwcfでクライアントをプロジェクトおよび使用するのに役立つか、これを達成するための方法論を提案できますか?
2 に答える
.NET フレームワークには、これ専用のSystem.ServiceModel.Discoveryという名前空間があります。高レベルから、使用可能なサービスを見つけることができるDiscoveryClientを使用します。
DiscoveryClientでサービスを検索できるようにするには、 AnnouncementClientクラスを介してサービス情報を送信する必要があります。このクラスにより、サービスはアナウンス メッセージを公開できます。ドキュメントから:
通知メッセージには、完全修飾コントラクト名、サービスが動作しているスコープ、サービスが送信するカスタム メタデータなど、サービスに関する情報が含まれています。
これらのクラスは、動的なサービスの検出と使用のための配管を提供するために必要なすべてのものである必要があります。
既存のサード パーティのエンドポイント (制御できないサービス) を利用しようとしている場合、.NET フレームワークには少なくとも 2 つの方法が用意されています。
MetadataExchangeClient は MEX/wsdl エンドポイントに接続し、サービス メタデータを表すオブジェクトのコレクションを返します。
MEX/wsdl エンドポイントと解決する型を渡すと、MetadataResolver は既知のサービスの構成を返します。これにより、事前に指定しなくても接続設定をインポートできます。
他に利用可能なものを確認するには、 System.ServiceModel.Description名前空間を調べてください。上記の 2 つのクラスに加えて、動的サービス解決に関連するその他のクラスがあります。
編集:これにより、メタデータを取得できました:
MetadataExchangeClient client = new MetadataExchangeClient(
new Uri("http://localhost:22948/Service1.svc?wsdl"),
MetadataExchangeClientMode.HttpGet);
var response = client.GetMetadata();