3

最近、c# asp.net (3.5) でいくつかの Web サービスに取り組んでいます。

私のメソッドはそのようで、いくつかの基本的なユーザー関連フィールド (名前、年齢、i など) で構成される User オブジェクトを返します。

[WebMethod, SoapHeader("AuthHeader")]
public user[] Employees(int count)
{
    user[] myUsers = new user[count];

    <logic here inc. checking if user is authorised>...

    return myUsers;
}

Web サービス ID を消費するクライアントの認証が失敗した場合、Web サービス内で正しくフォーマットされたエラーが返されます。

これを達成するためのベストプラクティスの方法は何ですか? 単純に Response.StatusCode または Null リターンをプッシュするのは良い習慣ではないと思いますか?

認証時の現在のペイロード XML は次のようになります。

<ArrayOfUser>
    <user>
        <empid>57344</empid>
        <firstname>Dave</firstname>
        <surname>Johnson</surname>
    </user>
    <user>
        <empid>17324</empid>
        <firstname>Mike</firstname>
        <surname>Doe</surname>
    </user>
</ArrayOfUser>

エラーが発生した場合、次のようなものを返す必要がありますか?

    <soap:error>
        <errorcode>12345</errorcode>
        <errorstring>Invalid username/password</errorstring>
    </soap:error>

または、より良いベストプラクティスの方法はありますか?

2 番目の問題は、そのような XML 構造を返すことができるように、どのようにメソッドを構築すればよいかということです。現在、私の「Employees」メソッドは「User[]」型であるため、「User」型の配列を返す必要がありますが、エラーが発生した場合は、上記の XML 構造をシミュレートするために別の型を返すか、単純なエラーが発生したことを示す文字列。

どうすればこれを達成できますか?

どんな助けでも素晴らしいでしょう!乾杯!

4

2 に答える 2

3

メソッドで例外をスローするだけで、.Net フレームワークがそれを SOAP エラー メッセージに変換します。

返される SOAP エラー メッセージをさらに制御したい場合は、SoapException

于 2012-08-01T10:02:51.680 に答える
-3

エラー処理の場合:アプリケーションをサポートするには、適切な例外処理フレームワークが必要です。エンタープライズ ライブラリの例外処理を使用している場合は、以下のコード行を使用します。

enter code here

catch (Exception ex)
{
    ExceptionPolicy.HandleException(ex, "Client Service Policy");
}

これも、ユーザーに表示するメッセージによって異なります。実際のエラー メッセージをログに記録し、カスタマイズされたメッセージをエンド ユーザーにスローできます。これは、例外処理フレームワークを使用して行うことができます。

例外処理フレームワークの実装について詳しく知ることができます。 http://www.devx.com/dotnet/Article/31463/1954

xml を返す場合: 以下に示すように要素を作成できます。最後に、xelement を文字列に変換し、呼び出し元メソッドで文字列を使用できます (文字列は XML に他なりません)。

enter code here

string[] directoriesList = Directory.GetDirectories(System.IO.Path.GetFullPat ("\\mynetworkpath")));
XElement foldersXML = new XElement("Folders");
foldersXML.Add(from directory in valueList select new XElement("Folders", new XAttribute("name", directory.Split('\\')[directory.Split('\\').Length - 1])));
于 2012-08-01T09:13:31.153 に答える