我喜欢WCF 4.0的功能,通过在配置文件中设置serviceActivations来托管没有.svc文件的服务。它使用默认的服务工厂很好,但现在我正在尝试使用AutofaServiceHostFactory来做同样的事情,这样我的依赖将被正确注入。在我尝试的所有场景中,尝试访问服务时仍出现此错误:为WCF配置的服务“WCFAutofacWiring.MyService”未在Autofac容器中注册。我在空的asp.net网站上托管我的服务。下面是我所做的:使用WCF服务使用Autofac使用WAS
Web.config文件:
<serviceHostingEnvironment>
<serviceActivations>
<add factory="Autofac.Integration.Wcf.AutofacServiceHostFactory"
relativeAddress="~/WASCurrentTime.svc"
service="WCFAutofacWiring.MyService" />
</serviceActivations>
</serviceHostingEnvironment>
然后,我把文件中的App_Code文件夹注册我的依赖作为Autofac文档(Autofac WcfIntegration)中规定,我与调试证实,该代码被称为在服务启动:
public static class AppStart
{
public static void AppInitialize()
{
AutofacHostFactory.Container = new AutofacBootstrapper().Configure();
}
}
最后,这是我的注册:
public class AutofacBootstrapper
{
public IContainer Configure()
{
var builder = new ContainerBuilder();
// register types
builder.Register<ILanguageProvider>(x => new MyLanguageProvider("en-US"));
builder.RegisterType<MyService>();
return builder.Build();
}
}
如果使用.svc文件而不是serviceActivation,我的服务可以很好地工作,但如果创建一个.svc文件,我觉得很浪费,如果唯一的原因是要设置一个我可以在我的web.config中指定的工厂。
有什么想法?
感谢
您是否尝试过使用该服务的完全限定名称?即'service =“WCFAutofacWiring.MyService,MyAssembly”'。 – khellang
是的,不起作用。对于我所看到的,问题不是来自类型无法解析的事实(错误消息包含程序集名称,所以我很确定它已被找到),但注册不被使用(或者aren不正确)。另一种可能性是AutofacHostFactory.Container在WAS上下文中不起作用。 –
这不是错误消息中的程序集名称,而是您在配置中指定的名称。它可以是任何东西:) – khellang