2

メタデータ交換用のMEXエンドポイントを使用してサービスを公開しており、以下のコードを使用してサービスを検出し、メタデータ情報を取得しています

DiscoveryClient discoveryClient = new DiscoveryClient(new UdpDiscoveryEndpoint());
FindCriteria findCriteria =      FindCriteria.CreateMetadataExchangeEndpointCriteria(ContractType);
findCriteria.Duration = TimeSpan.FromSeconds(15);
findCriteria.MaxResults = 1;// MaxResults;

FindResponse result = discoveryClient.Find(findCriteria);
discoveryClient.Close();

ServiceEndpointCollection eps = MetadataResolver.Resolve(ContractType, result.Endpoints[0].Address);
return eps[0].Binding;

クライアントでメタデータ情報を取得すると、バインディング情報(、、OpenTimeoutおよび ReceiveTimeoutSendTimeoutがデフォルト値に戻ります。

これがホストのバインディング情報です

<binding name="MyServiceBinding" closeTimeout="00:05:00" openTimeout="00:05:00"
      receiveTimeout="23:50:00" sendTimeout="00:05:00" maxReceivedMessageSize="50000000">
   <readerQuotas maxStringContentLength="50000000" maxArrayLength="50000000" />
   <reliableSession ordered="true" inactivityTimeout="00:01:00" enabled="false" />
   <security mode="None" />
</binding>

ここに私が見つけた別の質問がありますが、それは私のものとほとんど同じです。

カスタム値の代わりにデフォルト値を使用するWCFサービスバインディング

何か間違ったことをしているのか、メタデータ交換の概念を誤解しているのか知りたいのですが。

私がやろうとしているのは、クライアントに必要なすべての情報を送信して、クライアントが自分で自動構成できるようにし、ハードコード構成がないようにすることです。

4

1 に答える 1

4

私はあなたが何か悪いことをしているとは思いません-あなたはメタデータ交換にあまりにも多くを期待しているだけです。

MEXの目的は、プログラムで新しいサービスを検出し、それらのサービスのクライアント側プロキシを作成できるようにすることです。このために、WSDLがあります-基本的に、WSDLに含まれるものはすべてメタデータ交換の一部です。

  • サービス契約/サービス方法
  • これらのサービスメソッドに必要なパラメータ
  • 使用されるデータ型のXMLスキーマでのデータ型宣言
  • 使用されるバインディングなどの追加のサービス関連情報。

ただし、MEXにはすべてのWCF固有の構成設定が含まれているわけではありませ。これはあなたが発見したものです。MEXは、機能するクライアント側プロキシを作成しますが、サーバーからクライアントにすべての構成設定を転送する意図はありませんでした。クライアント側で、これを自分で手動でコーディングする必要があります。

于 2011-05-12T19:00:49.460 に答える