3

我最近一直在使用 c# asp.net (3.5) 开发一些 Web 服务。

我的方法就是这样,返回一个 User 对象,其中包含一些基本的用户相关字段(姓名、年龄、i 等)。

[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 当 auth'd 看起来像..

<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 结构,甚至是一个简单的说明发生错误的字符串。

我将如何实现这一目标?

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

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 回答