2012-07-07 124 views
2

我做了一个web服务,客户端将调用它的方法。假设一个方法需要四个参数,并且我想检查这些参数是否为空,我希望将响应发送回客户端,并且我想将它发送为警报,以便客户端知道哪些参数为空。我无法强制客户端准确地给出所有参数。这可能吗?如何返回来自webservice的响应

[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

你的方法返回类型void?如何将回复发送回客户端 – 2012-07-07 05:06:16

+0

@Waqar,根据下面的答案,抛出一个异常就可以了。 – 2012-07-07 05:35:58

+0

@sneakthief是的,我认为这是唯一的选择 – 2012-07-07 05:41:24

回答

1

不要用自定义对象重新发明轮子。看看this MSDN article

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

如果您想要更多的控制权限,例如设置故障代码的能力,则自己抛出SoapException

3

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

你可以,例如,使一个严重级别(可能使用类似微软的Severity enum,其中发送者可以再使用,以确定它们是否显示警告其用户或者干脆在你的回应中的一个字段在他们的系统上的某个地方记录错误。

+0

这是重新发明轮子:请参阅http://msdn.microsoft.com/en-us/library/ds492xtk%28VS.71%29.aspx – Joe 2012-07-07 05:18:01

+0

@sneakthief:OP说他无法控制客户。如果他可以让客户端写入:if(ws.Method1 ==“ERROR”)MessageBox.Show ....那么这将是很好的。 – 2012-07-07 05:23:12

+0

@Joe,感谢您的链接!无可否认,我写了一个Web服务已经过去几年了,这是我想到的第一件事。谢谢(你的)信息。 – 2012-07-07 05:32:48

1

你说你不能控制调用web方法的人。由于该方法的类型为void,用户只会知道是否发生了严重事件。如何抛出一个异常,错误会传播到什么样的细节取决于托管Web服务的Web服务器和托管客户端的Web服务器(如果客户端是网页)的设置。

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

在“最好”的情况下,用户会看到错误消息“的方法一STR1或STR2是空的。在‘最坏’的情况下,用户将得到标准的IIS/ASP.NET错误页面。就像你说的,你无法控制呼叫者,这取决于呼叫者如何编码客户端以及他如何部署应用程序。但无论如何,它都会引起他的注意!

我把最好和最差的语句放在引号中,因为对于不同的人来说,最好的和最坏的意味着不同的事情对于那些想要最大安全性的人来说,最好的是当错误页面没有提到错误时,对于想要用户友好和快速排除故障的人来说,最好的是当错误信息有很多细节和什么o接下来做。