我最近在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结构甚至是一个简单的字符串表示发生了错误。
我将如何实现这一目标?
任何帮助都会很棒!干杯!
答案 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])));