none
VS2008デバッグ時におけるFaultExceptionの取扱い RRS feed

  • 質問

  • VS2008WCFの例外処理で2日ほど煮詰まってます。

     

    以下の現象の回避策 知っている方いましたらご教授いただきたいです。

    よろしくお願いします


    ■環境
    VisualStudio2008 sp1

    WCFサービスライブラリをWcfSvcHost.exeでホスト(net.tcp)
    同ソリューションにWPFアプリケーションをWCFクライアントとして実装


    ■現象

    ・サーバー側でFaultExceptionをスローすると以下のメッセージが表示され
     一時デバッグ(処理?)が中断する
     ”FaultExceptionはユーザー コードによってハンドルされませんでした。”

    ・F5で実行を再開する

    ・クライアントのtry{}catch{}で例外をキャッチし、期待通りの動作をする

     

    ■やりたいこと

    ・サーバー側でFaultExceptionをスローするたびにデバッグを中断したくない
     #クライアント側のtry{}catch{}で直接、例外をキャッチしたい

    ※これが普通なんでしょうか?

     

    ■参考までに
    サーバー側App.config
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.web>
        <compilation debug="true" />
      </system.web>
      <system.serviceModel>
        <services>
          <service name="WcfServiceLibrary1.Service1" behaviorConfiguration="WcfServiceLibrary1.Service1Behavior">
            <host>
              <baseAddresses>
                <add baseAddress = "net.tcp://localhost:8731/WcfServiceLibrary1/Service1/" />
              </baseAddresses>
            </host>
            <!-- Service Endpoints -->
            <endpoint address ="" binding="netTcpBinding" contract="WcfServiceLibrary1.IService1">
              <identity>
                <dns value="localhost"/>
              </identity>
            </endpoint>
            <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange"/>
          </service>
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior name="WcfServiceLibrary1.Service1Behavior">
              <serviceMetadata httpGetEnabled="False"/>
              <serviceDebug includeExceptionDetailInFaults="True" />
            </behavior>
          </serviceBehaviors>
        </behaviors>
      </system.serviceModel>
    </configuration>


    2008年9月4日 10:26

回答

  •  あっし さんからの引用

    ・サーバー側でFaultExceptionをスローするたびにデバッグを中断したくない

     

    スローしているプロシージャをデバッグ対象から外すとか。

    http://msdn.microsoft.com/ja-jp/library/system.diagnostics.debuggerstepthroughattribute(VS.85).aspx

    あとはホストアプリケーションをVSではなく実際に起動するしかないかな。

     

     あっし さんからの引用

     ”FaultExceptionはユーザー コードによってハンドルされませんでした。”

    ・F5で実行を再開する

    ・クライアントのtry{}catch{}で例外をキャッチし、期待通りの動作をする

     

    ※これが普通なんでしょうか?

     

    ですね。

    WCFランタイム(ServiceHostクラス以下)がキャッチしてクライアントへメッセージングしてるってことですね。

    サービスとクライアントは同一プロセスではありませんので書かれた挙動は避けられないでしょう。

    逆にその他のユーザーコードがキャッチしてしまうとクライアントに通知される処理は走らないと思います。

     

    2008年9月4日 11:20

すべての返信

  •  あっし さんからの引用

    ・サーバー側でFaultExceptionをスローするたびにデバッグを中断したくない

     

    スローしているプロシージャをデバッグ対象から外すとか。

    http://msdn.microsoft.com/ja-jp/library/system.diagnostics.debuggerstepthroughattribute(VS.85).aspx

    あとはホストアプリケーションをVSではなく実際に起動するしかないかな。

     

     あっし さんからの引用

     ”FaultExceptionはユーザー コードによってハンドルされませんでした。”

    ・F5で実行を再開する

    ・クライアントのtry{}catch{}で例外をキャッチし、期待通りの動作をする

     

    ※これが普通なんでしょうか?

     

    ですね。

    WCFランタイム(ServiceHostクラス以下)がキャッチしてクライアントへメッセージングしてるってことですね。

    サービスとクライアントは同一プロセスではありませんので書かれた挙動は避けられないでしょう。

    逆にその他のユーザーコードがキャッチしてしまうとクライアントに通知される処理は走らないと思います。

     

    2008年9月4日 11:20
  • まどかさん、返信いただきありがとうございます。

     

     まどか さんからの引用

    スローしているプロシージャをデバッグ対象から外すとか。

    http://msdn.microsoft.com/ja-jp/library/system.diagnostics.debuggerstepthroughattribute(VS.85).aspx

     

    [DebuggerStepThroughAttribute]の存在は知りませんでした。

    例外をスローしているすべてのクラスに属性を付加すると

    デバッグができないし、書くのも手間という理由で、現実的ではないのかなと・・・

     

     まどか さんからの引用

     

     あっし さんからの引用

     ”FaultExceptionはユーザー コードによってハンドルされませんでした。”

    ・F5で実行を再開する

    ・クライアントのtry{}catch{}で例外をキャッチし、期待通りの動作をする

     

    ※これが普通なんでしょうか?

     

    ですね。

    WCFランタイム(ServiceHostクラス以下)がキャッチしてクライアントへメッセージングしてるってことですね。

    サービスとクライアントは同一プロセスではありませんので書かれた挙動は避けられないでしょう。

    逆にその他のユーザーコードがキャッチしてしまうとクライアントに通知される処理は走らないと思います。

     

     

    そうですね。

    改めて言われるとそのとおりだと思います。

     

    FaultException以外で、ホストからクライアントにエラーを通知する方法が他にないものか

    #ないでしょうけど・・・

    もう少し探してみます。

     

     

     

     

    2008年9月5日 6:56
  • こんにちは。中川俊輔 です。

     

    まどかさん、回答ありがとうございます。

     

    あっしさん、フォーラムのご利用ありがとうございます。

    有用な情報と思われたため、まどかさんの回答へ回答済みチェックをつけさせていただきました。

     

    回答済みチェックが付くことにより、有用な情報を探している方が情報を見つけやすくなります。
    有用な情報と思われる回答があった場合は、なるべく回答済みボタンを押してチェックを付けてください。

    あっしさんはチェックを解除することもできますので、ご確認ください。

     

    それでは!

    2008年9月18日 9:09