2

我喜欢 WCF 4.0 通过在配置文件中设置 serviceActivations 来托管没有 .svc 文件的服务的能力。使用默认服务工厂效果很好,但现在我尝试使用 AutofaServiceHostFactory 做同样的事情,这样我的依赖项将被正确注入。在我尝试过的所有场景中,当我尝试访问服务时仍然出现此错误:为 WCF 配置的服务 'WCFAutofacWiring.MyService' 未向 Autofac 容器注册。我将我的服务托管在一个空的 asp.net 网站中。这是我所做的:

网络配置:

<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,我的服务可以完美运行,但如果唯一的原因是设置我可以在 web.config 中指定的工厂,我发现创建 .svc 文件很浪费。

任何想法 ?

谢谢

4

1 回答 1

5

根据Autofac 来源,如果使用给定字符串的键控解析(来自配置)或使用Type.GetType给定字符串的类型化解析失败,则会引发异常。

在您的情况下,该Type.GetType方法可能会返回null,因为您没有 Type.AssemblyQualifiedName在配置中指定 a。

尝试获取typeof(MyService).AssemblyQualifiedName并将其插入到配置中。

于 2014-01-13T15:52:25.643 回答