我已经创建了一个Web服务,客户端将调用它的方法。假设一个方法需要四个参数,我想检查如果其中任何一个是空的我想要将响应发送回客户端,我想发送它像一个警告,所以客户端知道什么参数是空的。我无法强迫客户端准确地提供所有参数。这可能吗?
[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
}
}
答案 0 :(得分:3)
据我所知,您可以将一些商定的对象发送回发件人,发件人应该准备接收。它可能像包含“OK”或“ERROR”的字符串一样简单,或者它可能很复杂并且具有错误代码,描述,严重性级别等。发件人在使用它时对它做什么完全取决于它他们虽然。
例如,您可以将响应中的某个字段设置为严重级别(可能使用类似Microsoft的Severity enum),然后发件人可以使用这些字段来确定它们是否为向用户显示警报或只是在系统的某处记录错误。答案 1 :(得分:1)
你说你无法控制调用web方法的人。由于该方法属于void类型,因此用户只会知道是否发生了严重的事情。如何抛出异常,错误将传播到它依赖于托管Web服务的Web服务器和托管客户端的Web服务器(如果客户端是网页)的设置的详细信息。
throw new Exception("str1 or str2 in Method1 is empty");
在“最佳”情况下,用户将看到错误消息“方法1中的str1或str2为空。在”最坏“的情况下,用户将获得标准的IIS / ASP.NET错误页面。就像你说的你无法控制调用者,这取决于调用者如何编码客户端以及他如何部署应用程序。但无论如何,它都引起了他的注意!
我把最好和最差的引用放在引号中,因为最好和最差对不同的人来说意味着不同的东西。对于想要最大安全性的人来说,最好是错误页面没有说明错误。对于那些希望用户友好和快速排除故障的人来说,最好是错误消息包含大量详细信息以及下一步操作。
答案 2 :(得分:1)
不要使用自定义对象重新发明轮子。请看this MSDN article。
最简单的事情就是抛出一个异常(听起来像ArgumentException
适合您的情况),客户端将收到SoapException
。
如果您想要更多控制权,请自行抛出SoapException
,例如设置故障代码的能力。