0

Webとワーカーの役割を持つWindowsAzureクラウドサービスがあります。どちらのロールも、コンポジションルートのUnityコンテナーを使用してタイプを登録します(この投稿の時点で最新のnuget pkgs)。

このコードはすべて、デバッグ時にAzureエミュレーターで実行すると正常に機能しますが、パッケージを作成してクラウドサービスをデプロイすると、ロールを実行するとすぐにこのエラーが発生します(Webロールは、問題のタイプに依存するページですが、ワーカーロールは実行時にすぐにヒットします)。

次のようにNullReferenceExceptionが発生します。

[ResolutionFailedException: Resolution of the dependency failed, type = "MyApp.Mvc.Controllers.HomeController", name = "(none)".
Exception occurred while: Calling constructor MyApp.Azure.Messaging.ServiceBusMessagingClient(System.String serviceBusConnectionString).
Exception is: NullReferenceException - Object reference not set to an instance of an object.

AzureServiceBusのラッパークライアントである私のタイプのctorのコードは次のとおりです。

public ServiceBusMessagingClient(string serviceBusConnectionString)
    {
        Guard.NotNullOrEmpty(() => serviceBusConnectionString, serviceBusConnectionString);

        _log = LogFactory.GetCurrentClassLogger();

        ConnectionString = serviceBusConnectionString;

        _msgFactory = MessagingFactory.CreateFromConnectionString(ConnectionString);
        _retryPolicy = new RetryPolicy<ServiceBusTransientErrorDetectionStrategy>(RetryStrategy.DefaultClientRetryCount);
        _clients = new Dictionary<string, QueueClient>();
    }

そして、Webapp_startまたはワーカーロールのOnStartのいずれかで呼び出されるブートストラッパーのコードは次のとおりです。

var sbConn = CloudConfigurationManager.GetSetting(Constants.KeyServiceBusConnectionString);
container.RegisterType<IMessagingClient, ServiceBusMessagingClient>(new InjectionConstructor(sbConn));

なぜ私がそのような例外を受け取っているのか誰かに教えてもらえますか?ctorコードには、null参照を生成する可能性のあるものは何も表示されません。また、エミュレータでは機能するがクラウド展開では機能しない理由がわかりません。接続文字列がそこにあることを確認するために、クラウド設定をすでに確認しました。ありがとう!

4

1 に答える 1

1

わかりました... System.Reflection.StackFrame を作成するときに、DEBUB から RELEASE へのあいまいな動作の変更を見つけました。

私のLogFactory.GetCurrentClassLogger()メソッドは次のコードを実行します。

StackFrame frame = new StackFrame(1, false);

どうやら、RELEASE ビルドの場合、このスタック アップは に対して null を生成しますframe.GetMethod().DeclaringType

したがって、解決策は、null をチェックし、null の場合はロガー名に静的文字列を使用することでした。毎日何かを学びましょう。これが誰かに役立つことを願っています。

于 2013-03-20T16:03:09.537 に答える