我想在.config文件中存储端点配置,但能够在运行时修改基址。 EG:这些是我在app.config中的端点定义:
<endpoint address="net.tcp://BASEURI:1001/FooService/"
binding="netTcpBinding" bindingConfiguration="NetTcpBinding_Common"
contract="ServiceContracts.MyService"
name="FooService" />
<endpoint address="net.tcp://BASEURI:1002/BarService/"
binding="netTcpBinding" bindingConfiguration="NetTcpBinding_Special"
contract="ServiceContracts.MyService"
name="BarService" />
每个服务使用相同的合同(ServiceContracts.MyService
),但是生活在不同的端口,不同的路径,有时是不同的绑定配置。
我希望能够以编程方式提取地址“net.tcp:// BASEURI / FooService /”,将“BASEURI”替换为服务器的地址,然后在客户端连接时将其作为地址传递给DuplexChannelFactory被建造。 EG:
string ServiceToUse = "FooService";
var endpointConfig = SomeFunctionThatGetsTheConfig(ServiceToUse);
string trueAddress = endpointConfig.Address.Replace("BASEURI", "192.168.0.1");
DuplexChannelFactory<FooService> client =
new DuplexChannelFactory<FooService>(ServiceToUse, new EndpointAddress(trueAddress));
我知道客户端端点不支持服务端点的&lt; baseAddress&gt; 功能,但我的目的是以某种方式解决这个问题,以便我不必知道是什么其余的URI或绑定是。
注意:我没有使用Proxy类,我直接使用DuplexChannelFactory。
答案 0 :(得分:5)
您可以在ChannelFactory上轻松完成此操作,例如:
ChannelFactory<IFoo> cf = new ChannelFactory<IFoo>("EndpointConfigName");
string address = cf.Endpoint.Address.Uri.ToString();
address = address.Replace("BASEURI", "192.168.0.1");
cf.Endpoint.Address = new EndpointAddress(address);
嗯,你有DuplexChannelFactory,但想法是一样的。
答案 1 :(得分:0)
实施IEndpointBehavior并在添加时更改网址。
您需要更改ServiceEndpoint
中的ApplyClientBehavior
:
void ApplyClientBehavior(
ServiceEndpoint endpoint,
ClientRuntime clientRuntime
)
{
endpoint.Address = ...
}