- PR -

クライアント側でサーバのWebメソッドでThrowした例外オブジェクトを受取りたい

1
投稿者投稿内容
ryuuji
ベテラン
会議室デビュー日: 2003/07/10
投稿数: 53
お住まい・勤務地: 東京都
投稿日時: 2005-01-20 21:13
毎々お世話になっております。

例外をただスローするだけのWebメソッドを実装したWebサービスがあるとして、クライアント側のアプリケーション(下記例ではコンソールアプリ)でtry-catchをするとSystem.Web.Services.Protocols.SoapExceptionがcatchされます。

これはサーバ側のWebメソッド内でThrowされた例外をASP.NETがSoapExceptionに丸め込むようなのですが、この例外オブジェクトのInnerExceptionプロパティに内部例外(Webメソッド内でThrowした例外オブジェクト)が格納されているかと思いきやnullでした。

このSoapExceptionからWebサービスのWebメソッド内でThrowした例外オブジェクトを取得する方法というのは無いのでしょうか?(もとの例外情報はMessageプロパティにデータとしては格納されているのですが)

ちなみに同じプロセス越えの手段として.NET Remotingだと可能なようです。

ご存知の方、何卒余禄お願い致します。

コード:
public void Run()
{
         try
	{
		ExceptionWebService ws = new ExceptionWebService();
		ws.ThrowSystemException();//サーバ側ではSystem.Exceptionをスロー
	}
	catch ( System.Exception ex )
	{
		Console.WriteLine( ex.ToString() );
		//Console.WriteLine( ex.InnerException.ToString() );
		Console.WriteLine( ex.Message ); //元例外情報
	}
}

Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-01-20 22:38
 で、疑問に思ってどういうことをしました?Webサービスをバインドすると、そのためのコードが作成されますが、それは見ました?

 InnerException・・・というか、例外の情報は、どういうものがありますか?それを外に垂れ流すのがよいことだと思いますか?

 あるいは、Webサービスが例外をだして、それをWebサービス内で処理せず、クライアントまで返すのがよいつくりだと思いますか?
_________________
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-01-21 22:34
 これ、ジレンマですよね。
 フレームワークを用意した側は、Webサービスを広く一般に開放するサービスであると定義しています。その為、例外情報を流さないように作っている。
 しかし、ある種の現場に置いては、ローカルLANで完結する中でWebサービスを利用する。そのため、例外情報が流れてもかまわない。むしろデバッグの時などは流れてきて欲しい...
ryuuji
ベテラン
会議室デビュー日: 2003/07/10
投稿数: 53
お住まい・勤務地: 東京都
投稿日時: 2005-01-25 11:23
返答が遅れて申し訳ありません。多忙のため、こちらの調査が後回しになってしまいました。

調べたところ、以下のURLにWebサービスで例外が発生した場合、.NETの思想としてサーバで詳細なログを取り、クライアント側には例外が発生した事実だけを通知することで例外情報を外部から隠蔽するとありました。
http://www.microsoft.com/japan/msdn/net/bda/exceptdotnet.asp

引用:

しかし、ある種の現場に置いては、ローカルLANで完結する中でWebサービスを利用する。そのため、例外情報が流れてもかまわない。むしろデバッグの時などは流れてきて欲しい...



そもそもの発端は、今回Webサービスを置くサーバ機にはお客様の都合上簡単に触れるものではないので例外時にクライアントにも詳細な例外情報が取得できないかと考えてました。セキュリティの面では外部から完全に隔絶されたネットワーク上のシステムであること、SSLを使用すること、という点から例外情報がノードを超えても問題が無いと考えていました。

引用:

これ、ジレンマですよね。
 フレームワークを用意した側は、Webサービスを広く一般に開放するサービスであると定義しています。その為、例外情報を流さないように作っている。



IEの設定にあるセキュリティ・ゾーンのようなものがあると良いですね。穴になりやすいですが。

ご意見有難うございました。勉強になりました。
1

スキルアップ/キャリアアップ(JOB@IT)