0

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 に設定されているということですが、何かが割り当てをリセットしているように見えます。助言がありますか?

4

1 に答える 1

1

答えは、要因の組み合わせのようです。

まず、Autofac の登録とブーストラップを WebRole から Global.asax に移動しました。これは、私が最初に受け取ったエラー メッセージに対処するのに役立ちました。

次に、サービス登録の間違いを修正し、登録を次のように再構成しました。

builder.RegisterType<EposDataService>().As<IEposDataService>()

builder.RegisterType<EposDataService>().AsSelf();

参考: - autofac wcf登録エラー

3 番目に、svc のサービス名を完全に修飾しました。参考文献:

于 2013-03-10T22:51:24.080 に答える