既知のエンドポイント上の1つのサービスが、相対アドレスである文字列を返す方法が必要です。その後、クライアントはこれらの相対アドレスを使用してエンドポイントに接続できます。明らかにこれはいくつかの点でRESTに似ていますが、この場合、IPCにNetNamedPipeBindingを使用してWindowsサービスを実行しているため、HTTPは必要ありません。
潜在的に多数の相対アドレスが存在するため、事前にエンドポイントを作成しないでください。クライアントが関心を持つのはそのうちの一部のみです。
すべての契約は事前に知られています。
AddressFilterModeで解決策を見つけようとしましたが、クライアントがそれに接続するように新しいBindingをプロビジョニングする方法がわかりませんでした。UriTemplateですが、 HTTPフレームワークを使用したくありません。.Net 3.5に制約されているため、 RoutingServiceを調べていません。
クライアントの擬似コードは次のようになります...
namespace Testing
{
class RunTest
{
static void Test()
{
NetNamedPipeBinding namedpipe = new NetNamedPipeBinding();
ChannelFactory<Contracts.IRoot> factoryRoot =
new ChannelFactory<Contracts.IRoot>(
namedpipe
, new EndpointAddress("net.pipe://localhost/root");
);
Contracts.IRoot root = factoryRoot.CreateChannel();
ICommunicationObject commsRoot = root as ICommunicationObject;
commsRoot.Open();
// Service examines address and creates Endpoint dynamically.
string address = root.SomeFunctionWhichGetsARelativeAddress();
// IBar service routes endpoint requests internally based on
// "address" variable.
ChannelFactory<Contracts.IBar> factoryBar =
new ChannelFactory<Contracts.IBar>(
namedpipe
, new EndpointAddress("net.pipe://localhost/root/IBar/" +
address)
);
Contracts.IBar bar = factoryBar.CreateChannel();
bar.DoSomething();
}
} // Ends class RunTest
} // Ends namespace Testing