2

我做了一个网络服务,客户会调用它的方法。假设一个方法有四个参数,我想检查其中任何一个参数是否为空,我想将响应发送回客户端,并且我想像警报一样发送它,以便客户端知道哪个参数为空。我不能强迫客户提供准确的所有参数。这可能吗?

[WebMethod]
Public void Method1(string str1,string str2,string str3,string str4)
{
    if((str1=="") || (str2==""))
    {
        //send response back to client in form of an alert
    }
}
4

3 回答 3

3

据我所知,您可以将一些商定的对象发送回发送者,发送者应该准备好接收这些对象。它可以像包含“OK”或“ERROR”的字符串一样简单,也可以很复杂并且具有错误代码、描述、严重级别等。发送者在使用它时如何处理它完全取决于他们虽然。

例如,您可以将响应中的某个字段设置为严重级别(可能使用 Microsoft 的Severity enum之类的东西),然后发件人可以使用它来确定他们是否向用户显示警报或只是在某处记录错误他们的系统。

于 2012-07-07T04:42:56.540 回答
1

你说你无法控制调用 web 方法的人。由于该方法是 void 类型,因此用户只会知道是否发生了剧烈的事情。抛出异常怎么样,错误会传播到什么细节,这取决于托管 Web 服务的 Web 服务器和托管客户端的 Web 服务器的设置(如果客户端是网页)。

throw new Exception("str1 or str2 in Method1 is empty");

在“最佳”情况下,用户将看到错误消息“方法 1 中的 str1 或 str2 为空。在“最坏”情况下,用户将获得标准 IIS/ASP.NET 错误页面。就像你说的你没有对调用者的控制,取决于调用者如何编码客户端以及如何部署应用程序。但无论如何,它会引起他的注意!

我把最好和最差放在引号里,因为最好和最差对不同的人意味着不同的东西。对于想要最大安全性的人来说,最好是错误页面没有说明错误。对于想要用户友好和快速故障排除的人来说,最好是在错误消息有很多细节和下一步做什么的时候。

于 2012-07-07T05:11:34.257 回答
1

不要用自定义对象重新发明轮子。看看这篇 MSDN 文章

最简单的事情就是抛出一个异常(听起来ArgumentException你的情况是合适的),客户端将收到一个SoapException.

SoapException如果您想要更多控制权,例如设置故障代码的能力,或者自己扔一个。

于 2012-07-07T05:17:22.073 回答