0

app.config ファイルで定義されたエンドポイントのエンドポイント動作を交換することは可能ですか?

基本的に、カスタム バインディングが定義された単一のエンドポイントがあります。コードから、WCF プロキシ クライアントのエンドポイント アドレスを設定しました。エンドポイント アドレスに応じて異なるエンドポイント動作を使用したいと考えています。

擬似コード:

var client = new WcfClient("endpointName", new endpointAddress("https://..."));
client.Endpoint.Behaviors.Add(EndpointBehavior.CreateFromConfig("behaviorName"));

これは(簡単に)可能ですか?app.config に振る舞いの定義を入れたいのですが、エンドポイントのアドレスに応じて動的にロードします。

4

2 に答える 2

1

System.ServiceModel.Configuration 名前空間を介して構成にアクセスできます。対応するセクションを読み、エンドポイント/動作を手動で構築します...

複数のエンドポイントを作成し、クライアントを名前でインスタンス化することもできます: http://msdn.microsoft.com/en-us/library/ms751515.aspx

構成名前空間から BehaviorExtensionElement を使用して動作を作成することもできます。ここで例を見つけました: http://weblogs.asp.net/cibrax/archive/2010/05/11/getting-wcf-bindings-and-behaviors-from-any-config-source.aspx

たとえば、サーバーの場合: ServiceHost インスタンスが既に開いている場合は、そこからほとんどの情報に直接アクセスすることもできます。

// BaseAddress
Console.WriteLine(serviceHost.BaseAddress);

// Endpoints (non-MEX)
foreach (ServiceEndpoint ep in serviceHost.Description.Endpoints)
{
  if (serviceHost.BaseAddress.Any(uri => uri.Equals(ep.ListenUri) &&
      ep.Contract.ContractType != typeof(IMetadataExchange))
  {
    Console.WriteLine("ListenURI: " + ep.ListenUri);
    Console.WriteLine("  Name   : " + ep.Name);
    Console.WriteLine("  Binding: " + ep.Binding.GetType().FullName);
  }
}

// List of MEX endpoints:
foreach (ServiceEndpoint ep in serviceHost.Description.Endpoints)
{
  if (ep.Contract.ContractType == typeof(IMetadataExchange))
  {
    Console.WriteLine(ep.ListenUri.ToString());
  }
}
于 2013-09-23T08:45:04.607 に答える
-1

実行時にエンドポイントを設定します。

yourProxy.ChannelFactory.Endpoint.Address = 新しい ServiceModel.EndpointAddress("someSvcURL")

于 2013-09-23T19:18:13.430 に答える