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 でホストされるシナリオにのみ使用されますか? その場合、自己ホスト型の InstanceContextMode.Single サービスに SM を使用するにはどうすればよいですか?

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 に答える