我在一个VS解决方案中有三种不同的服务。
IServiceA,IServiceB和IServiceC。在暴露的功能和使用模式方面,所有这三种服务都是独立的(例如,高度调用,很少调用,关键,非关键)。所以每个都有自己的实现。但是,Logging
,DataAccess
等内容很少被共享。
我将在IIS中仅创建单个VD,并将所有内容放入其中。我们使用WebFarm和服务是无状态的(PerCall)
问题1:如果我为每个合同使用不同的主机而不是考虑不同使用模式的一个服务实现三个合同,我会得到什么好处?一台主机中未处理的异常是否仍会导致其他主机崩溃?
问题2:如果在这种情况下建议使用多台主机,那么如何配置ServiceHostFactory和Autofac?我应该只创建一个ServiceHostFactory来创建主机吗?我需要一个示例来配置多个WCF主机的DI。
我的网站.Config -
<serviceHostingEnvironment>
<serviceActivations>
<add factory="CommonService.Host.ServiceAHostFactory,Host" service="CommonService.Contract.IServiceA,Contract" relativeAddress="ServiceA.svc"/>
<add factory="CommonService.Host.ServiceBHostFactory,Host" service="CommonService.Contract.IServiceB,Contract" relativeAddress="ServiceB.svc"/>
<add factory="CommonService.Host.ServiceCHostFactory,Host" service="CommonService.Contract.IServiceC,Contract" relativeAddress="ServiceC.svc"/>
</serviceActivations>
</serviceHostingEnvironment>
public class ServiceAHostFactory:AutofacHostFactory
{
public override ServiceHostBase CreateServiceHost(string constructorString, Uri[] baseAddresses)
{
var builder = new ContainerBuilder();
builder.RegisterType<ServiceA>().As<IServiceA>();
Container = builder.Build();
return base.CreateServiceHost(constructorString, baseAddresses);
}
protected override ServiceHost CreateSingletonServiceHost(object singletonInstance, Uri[] baseAddresses)
{
return new ServiceHost(singletonInstance, baseAddresses);
}
}
public class ServiceBHostFactory:AutofacHostFactory
{
public override ServiceHostBase CreateServiceHost(string constructorString, Uri[] baseAddresses)
{
var builder = new ContainerBuilder();
builder.RegisterType<ServiceB>().As<IServiceB>();
Container = builder.Build();
return base.CreateServiceHost(constructorString, baseAddresses);
}
protected override ServiceHost CreateSingletonServiceHost(object singletonInstance, Uri[] baseAddresses)
{
return new ServiceHost(singletonInstance, baseAddresses);
}
}
还有一个ServiceC的主机工厂。 我想改进这个设计,欢迎提出意见。现在我只有三项服务,但是我们将继续添加更多服务。
这是怎么做的?或者我错过了什么?还是完全走错了路?