我是一名有帮助的助手,以下是您需要翻译的内容:
这里的问题在于
但是这种方式意味着每次我想在不同的服务器上添加相同的WCF服务时都需要编辑代码。相反,我希望从数据库中获取地址。
我有一个WCF客户端在MVC应用程序中使用,可以从多个WCF服务获取数据,这些服务的配置方式相同,并且实现了相同的接口,唯一的区别是公开终结点的地址。
这是我尝试过的:
builder.Register(c => new ChannelFactory<IService>(
new BasicHttpBinding(),
new EndpointAddress("http://service.com/Service")))
.InstancePerHttpRequest();
builder.Register(c => c.Resolve<ChannelFactory<IService>>().CreateChannel())
.UseWcfSafeRelease();
这里的问题在于
IService
总是从http://service.com/Service
获取数据,因为该地址在MVC应用程序的Application_Start
方法中某处硬编码了。然后我尝试使用元数据: builder.Register(c => new ChannelFactory<IService>(
new BasicHttpBinding(),
new EndpointAddress("http://foo.com/Service")))
.SingleInstance().WithMetadata("name", "fooservice");
builder.Register(c => new ChannelFactory<IService>(
new BasicHttpBinding(),
new EndpointAddress("http://bar.com/Service")))
.SingleInstance().WithMetadata("name", "barservice");
builder.Register(c => c.Resolve<ChannelFactory<IService>>().CreateChannel())
.UseWcfSafeRelease();
但是这种方式意味着每次我想在不同的服务器上添加相同的WCF服务时都需要编辑代码。相反,我希望从数据库中获取地址。
是否有任何方法可以在每个服务调用或至少在客户端实例创建时更改地址?
附加说明:
假设我有五个完全相同的网站副本,每个副本都有自己的域名和数据库。我想能够执行以下操作:
foreach(Provider provider in providers)
{
SetServiceAddress(provider.Address);//how can i do that
_service.GetData()
}