我正在使用WSDL编写一个基于Java的服务供.Net客户端使用,我认为当我从客户端收到一个无效值时,我会抛出一个异常,然后我的客户端可以捕获并显示在一条消息中框或用户的东西(客户端是桌面应用程序)。
我想知道是否可以使用这种方法,或者是否有更好的方法。
答案 0 :(得分:9)
我会说“不”。错误消息等,但我不会序列化异常。你不知道客户是谁,也不知道他们写的是什么语言。
服务应该处理异常:捕获它,记录它,并创建一个合理的错误消息和状态代码。在我看来,这不是例外的地方。
当我说“明智的错误消息”时,我并不是指任何类似堆栈跟踪的东西。这些可能是商业客户,他们不应该阅读这些东西。商业上有意义的消息是这里的票证,而不是堆栈跟踪。
答案 1 :(得分:8)
.NET通常在WCF中处理FaultExceptions(包装的SOAP错误)。我假设如果你抛出一个正确的SOAP Fault,那么当客户端使用响应时,WCF会将它包装成FaultException,因此他们可以使用try catch FaultException语句。这仍然允许其他非.NET客户端在不违反标准的情况下使用该服务。
无论如何只是一个想法......
答案 2 :(得分:4)
您应该做的是使用SOAP Faults,因为任何客户端都应该支持SOAP Faults。一定要设置额外的描述性字段。
答案 3 :(得分:1)
从概念上讲这很好,但我认为你不能从字面上通过HTTP将Java Exception抛回.NET客户端。
您可以使用HTTP 500来发出服务器错误信号;您还应该能够在响应中附加有意义的消息,以帮助.NET开发人员更好地了解如何使用您的服务。这可能包括也可能不包括序列化的Java堆栈跟踪。
答案 4 :(得分:0)
要解决的第一件事是防止在数据被操纵之前对数据进行验证而抛出异常。 IE
string func(string cat)
if(cat == null || cat.length == 0){
//set errorLabelText to "bad data"
return;
}
//else code
据说这只是在例外情况下抛出异常。