C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: Web サービスの例外処理


(過去ログ 13 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■3740 / inTopicNo.1)  Web サービスの例外処理
  
□投稿者/ カナディアンマン (1回)-(2007/05/21(Mon) 23:31:20)

分類:[.NET 全般] 

こんばんは。初めて投稿します。

.NET (Framework 2.0) の Web サービスで例外処理をすることで
悩んでいます。

業務系の例外 (ユーザーコードが重複するなど)
を通知するのに、
SoapException.Detail に含める所まではわかったのですが、
それが .NET での正攻法であるかがわかりません。
そもそも、.NET ではこれらの例外を Web サービスから
どのように通知するべきなのでしょうか?

戻り値にはユーザーデータ構造体を返したいと思っておりますので、
例外情報は含めたくないと思っています。

皆様のアドバイスをお願いいたします。

引用返信 編集キー/
■3741 / inTopicNo.2)  Re[1]: Web サービスの例外処理
□投稿者/ 中博俊 (1073回)-(2007/05/21(Mon) 23:53:28)
中博俊 さんの Web サイト
Webサービスの向こう側には何も情報を伝えないのが成功方です。
Webサービスは例外も投げないか、投げても何も情報を出さずに、Webサービス側で記録するようにしてください。
というか内容的には意味が違うか。
引用返信 編集キー/
■3752 / inTopicNo.3)  Re[2]: Web サービスの例外処理
□投稿者/ カナディアンマン (2回)-(2007/05/22(Tue) 10:26:26)
2007/05/22(Tue) 10:29:16 編集(投稿者)
2007/05/22(Tue) 10:29:04 編集(投稿者)

中博様
ご教授ありがとうございました。

いただきました内容を以下のように解釈しました。
・ユーザーに関係のないシステム情報はシステム内部で処理して表示しない。
・サーバの例外情報の詳細はサーバで処理し、クライアントには
 例外が発生したという概要のみを通知する。

私は .NET の初心者ですが、Java との例外の違いがわかった
ような気がします。
.NET での例外とは、あくまでも例外 (ユースケースでいう例外フロー) であり、
ユースケースでいう代替フローには使用しないということですね
(表現が下手ですみません)。

補足ですが、以下のようなコードを考えていました。
(1) 例外による代替フロー (クライアント側)
  ※Java 風
  // Web サービスインスタンスを構築します
  UserWebService userService = new UserWebService();
  try
  {
    // 登録用ユーザー情報を入力フィールドより構築します
    User user = new User();
    user.UserCode = userCodeTextBox.Text;
    // ユーザー情報の登録を実施します
    // 戻り値は、ユーザー ID (シーケンス) を付与したユーザー情報です。
    User registeredUser = userService.RegisterUser(user);
  }
  catch (DuplicateUserCodeException ex) // SoapException でこのようなことをする予定
  {
    // 代替フロー: ユーザーの入力したコードが重複している
    MessageBox.Show("指定されたユーザーコードはすでに使用されています。");
    userCodeTextBox.Focus();
    return;
  }
(2) 戻り値による代替フロー(クライアント側)
  // Web サービスインスタンスを構築します
  UserWebService userService = new UserWebService();
  // 登録用ユーザー情報を入力フィールドより構築します
  User user = new User();
  user.UserCode = userCodeTextBox.Text;
  // ユーザー情報の登録を実施します
  UserRegistrationResults results = userService.RegisterUser(user);
  if (ErrorCodes.DuplicateUserCode == results.ResultCode)
  {
    // 代替フロー: ユーザーの入力したコードが重複している
    MessageBox.Show("指定されたユーザーコードはすでに使用されています。");
    userCodeTextBox.Focus();
    return;
  }
  // ユーザー ID (シーケンス) を付与したユーザー情報です。
  User registeredUser = results.RegisteredUser;

(2) の方が .NET では正攻法ということですよね?

長文になりましたがよろしくお願いいたします。

解決済み
引用返信 編集キー/
■3761 / inTopicNo.4)  Re[3]: Web サービスの例外処理
□投稿者/ 中博俊 (1074回)-(2007/05/22(Tue) 20:23:57)
中博俊 さんの Web サイト
>.NET での例外とは、あくまでも例外 (ユースケースでいう例外フロー) であり、
>ユースケースでいう代替フローには使用しないということですね
>(表現が下手ですみません)。

一般的にJさんは例外を多用するわけですが、.NETでは例外は基本的に使いません。本当の例外。

でも!!!

この場合の例外を伝播させるかどうかなどはセキュリティの問題であり、Jだろうがなんだろうが関係なくインターフェイス部分で丸めこんでしまうものです。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -