2

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

正如许多博客/文章(此处)所述,跨实例共享 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 服务?

4

2 回答 2

0

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

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

我在这里有一个示例项目,全部与自定义提供程序(和结构图) https://github.com/billCreativeD/WCF_With_DI

于 2012-12-21T20:38:46.707 回答
0

不幸的是,说“服务使用工厂”是没有意义的。您将使用 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 如何实例化您的服务。

于 2013-02-12T16:12:53.623 回答