【问题标题】:Configuring a WCF and StructureMap ServiceHostFactory from code从代码配置 WCF 和 StructureMap ServiceHostFactory
【发布时间】:2012-08-14 20:35:25
【问题描述】:

我正在创建一个自定义 ServiceHost 对象并通过代码对其进行配置。我的服务正在使用 InstanceContextMode.Single 和 ConcurrencyMode.Multiple 并托管在 Windows 服务中。

正如许多博客/文章 (here) 中所述,跨实例共享 StructureMap 容器需要使用自定义的 InstanceProvider、ServiceBehavior 和 ServiceHostFactory。

我的初始化代码如下所示。我不使用配置文件。

var baseAddress = ConfigurationManager.AppSettings["BaseAddress"];
var port = Int32.Parse(ConfigurationManager.AppSettings["Port"]);

Host = new MyServiceHost(typeof(MediaFileServicePrivate), new Uri(string.Format(baseAddress, port)));

var binding = new NetTcpBinding();
Host.AddServiceEndpoint(typeof(IMediaFileServicePrivate), binding, string.Format(baseAddress, port));

如何告诉服务使用我的自定义服务主机工厂?我能找到的所有示例都从配置文件中进行配置。

ServiceHostFactory 是否仅用于 IIS/WAS 托管方案?如果是这样,我如何将 SM 用于自托管的 InstanceContextMode.Single 服务?

【问题讨论】:

    标签: wcf structuremap


    【解决方案1】:

    这还没有回答吗?基本上你告诉它在 wcf 标记中使用你的 servicefactory

    <%@ ServiceHost Language="C#" Debug="true" Service="WcfWithDI.Service1" CodeBehind="Service1.svc.cs" Factory="WcfWithDI.MyServiceFactory"%>

    我在这里有一个示例项目,所有这些都与自定义提供程序(和结构图)连接起来 https://github.com/billCreativeD/WCF_With_DI

    【讨论】:

    • 就我而言,后面没有代码。如我的问题所示,它是 100% C#。
    【解决方案2】:

    不幸的是,说“服务使用工厂”是没有意义的。您将使用 Ninject 工厂来创建您的服务:

    var factory = new NinjectServiceHostFactory();
    
    var address = new Uri(_baseAddress, path);
    ServiceHostBase host = factory.CreateServiceHost(typeName, new[] {address});
    
    var binding = new NetTcpBinding();
    host.AddServiceEndpoint(typeof(TheType), binding, string.Format(baseAddress, port));
    

    .svc 文件中的指令用于告诉 .NET 如何实例化您的服务。

    【讨论】:

    • 问题是关于如何从代码而不是配置文件配置 StructureMap。
    • Yes."我如何告诉服务使用我的自定义服务主机工厂?" - 假设“服务主机工厂”指的是 WCF 服务主机工厂,那么这个问题是有缺陷的。该服务不使用工厂。工厂创建服务。
    • 虽然你是对的,但 ninject 没有相关性。 (我觉得写的时候有点粗心;我遇到了和你的问题一样的问题,只是使用了 ninject 而不是 StructureMap。)
    猜你喜欢
    • 2013-08-05
    • 1970-01-01
    • 1970-01-01
    • 2012-01-26
    • 1970-01-01
    • 2012-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多