.NET Web服务 - 如何返回错误?

时间:2012-08-01 08:39:53

标签: c# .net xml web-services error-handling

我最近在c#asp.net(3.5)上一直在做一些网络服务。

我的方法是这样的,并返回一个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返回是不是很好的做法?

当auth'd看起来像我的当前有效载荷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>

还是有更好的最佳做法吗?

第二个问题是,如何构建我的方法以便返回这样的XML结构?目前我的“Employees”方法是“User []”类型,所以必须返回一个类型为“User”的数组,但是如果这是一个错误我想返回一个不同的类型来模拟上面的XML结构甚至是一个简单的字符串表示发生了错误。

我将如何实现这一目标?

任何帮助都会很棒!干杯!

2 个答案:

答案 0 :(得分:3)

让你的方法抛出异常 - .Net框架会将其转换为SOAP错误消息。

如果您想要更多地控制返回的SOAP错误消息,请抛出SoapException

答案 1 :(得分:-3)

对于错误处理:您需要一个良好的异常处理框架来支持您的应用程序。如果您正在使用corporatebibrary异常处理,请使用以下代码行。

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])));