none
Azure の Cloud Service で Web ロール (WCF) が応答しない RRS feed

  • 質問

  • Azure の Cloud Service を作っています。

    サービスの流れは、

    外部から ajax で POST された要求を Web ロールで受け付け、

    Web ロールがキューにメッセージを挿入し、

    Worker ロールで処理するという至って普通のものです。

    その Cloud Service で Web ロールが応答しない問題が発生するようになりました。

    つまり、サービスの呼び出し側がレスポンスを待ち続けてしまっています。

    この問題が発生する以前は、呼び出し側とメッセージをやりとりできていました。

    また、Web ロールの実装はその頃から変更していません。


    デプロイはもちろん成功していますし、ポータルでロールを確認しても「実行中」となっており、さも正常に動いているかのように見えます。

    デバッグのため Trace を仕込んでみましたが、ストレージへの転送を行っているにも関わらず、ログが取れていませんでした。

    ちなみに、Worker ロールは正常に動作し、一定間隔で "Working" というトレースログを出力してくれています。

    サーバーエクスプローラから見られる診断データを確認すると、

    System.ArgumentNullException: Value cannot be null. Parameter name: key」が発生していました。

    このエラーは、サービスのエンドポイントにブラウザでアクセスしても表示されます。

    最初は、呼び出し側が正しい POST メッセージを送っていないのではないかと思ったのですが、

    そもそも OperationContract として定義したメソッド内のトレースログが出力されないため、

    メッセージを受け取る以前の問題であるように思います。

    この場合、解決策や有効なデバッグ方法はありますか?

    よろしくお願いします。

    2015年4月21日 9:41

回答

  • 自己解決しました。

    .NET のバグ (?) を踏んでいたようです。

    以下の情報を見つけ、参考にしました。

    • http://stackoverflow.com/questions/2977630/wcf-instance-already-exists-in-counterset-error-when-reopening-servicehost
    • http://stackoverflow.com/questions/25268119/wcf-service-hosted-in-azure-cloud-service-errors-after-published

    具体的には、まず web.config に以下を追加しました。

    <system.serviceModel>
      <diagnostics performanceCounters="Off" />
    </system.serviceModel>

    これでもまだ例外が発生していたので、さらに IntelliTrace を無効にしました。

    そうしてデプロイしたところ、例外は発生せず、正常にサービスを呼び出せるようになりました。

    • 回答としてマーク krkwyh 2015年4月22日 8:47
    2015年4月22日 8:47

すべての返信

  • こんにちは。

    リモートデバッガを有効にしてデプロイした後、アタッチする方法もあります

    https://msdn.microsoft.com/ja-jp/library/azure/ff683670.aspx

    ※ アプリケーション側に処理が来ていれば可能ですがそれ以前の場合はあまりあてになりませんが

    あとはIntelliTraceを有効にするなどでしょうか。

    2015年4月21日 15:51
    モデレータ
  • 自己解決しました。

    .NET のバグ (?) を踏んでいたようです。

    以下の情報を見つけ、参考にしました。

    • http://stackoverflow.com/questions/2977630/wcf-instance-already-exists-in-counterset-error-when-reopening-servicehost
    • http://stackoverflow.com/questions/25268119/wcf-service-hosted-in-azure-cloud-service-errors-after-published

    具体的には、まず web.config に以下を追加しました。

    <system.serviceModel>
      <diagnostics performanceCounters="Off" />
    </system.serviceModel>

    これでもまだ例外が発生していたので、さらに IntelliTrace を無効にしました。

    そうしてデプロイしたところ、例外は発生せず、正常にサービスを呼び出せるようになりました。

    • 回答としてマーク krkwyh 2015年4月22日 8:47
    2015年4月22日 8:47