Azure が Http バインディングで WCF サービスを使用し、Autofac の WCF 統合を使用するように単純なプロジェクトを構成しようとしています。現在、ローカルでテストし、IIS (Azure) でホストしています。
最初に、Autofac なしで実行するようにプロジェクトをセットアップし、サービスをインスタンス化して、ブラウザーを介して公開された WSDL エンドポイントを確認します。
次に、services svc ファイルを変更し、Factory 定義を追加しました。
<%@ ServiceHost Language="C#" Debug="true" Service="EposDataService" Factory="Autofac.Integration.Wcf.AutofacServiceHostFactory, Autofac.Integration.Wcf" %>
次に、WebRole クラスを次のように変更しました。
public override void Run()
{
// This is a sample worker implementation. Replace with your logic.
Trace.WriteLine("Worker entry point called", "Information");
var builder = new ContainerBuilder();
builder.RegisterModule(new ServiceModule());
//using (m_Container = builder.Build())
m_Container = builder.Build();
//{
AutofacHostFactory.Container = m_Container;
while (true)
{
// sleep 30 minutes. we don't really need to do anything here.
Thread.Sleep(1800000);
Trace.WriteLine("Working", "Information");
}
//}
}
ただし、サービスをローカルにデプロイしてサービスにアクセスしようとすると、エラーが発生します。
The AutofacServiceHost.Container static property must be set before services can be instantiated.
Exception Details: System.InvalidOperationException: The AutofacServiceHost.Container static property must be set before services can be instantiated.
私が理解できないのは、静的プロパティが WebRole に設定されているということですが、何かが割り当てをリセットしているように見えます。助言がありますか?