Mik*_*sen 3 .net c# asp.net web-services asp.net-ajax
在.NET 3.5中,我有以下代码:
[WebService(Namespace = "http://kitchenpc.com/schemas/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ScriptService]
public class KitchenPC : System.Web.Services.WebService
{
[WebMethod]
public LogonResult Logon(string username, string password)
{
//If username and password are not valid...
throw new InvalidUsernameOrPasswordException();
}
}
Run Code Online (Sandbox Code Playgroud)
当我打电话给它时,如果我传入了无效的用户名和密码,那么InvalidUsernameOrPasswordException就会被抛出,我可以通过查看来捕获Javascript中的异常error.get_exceptionType().这是因为Web服务将在JSON中序列化异常信息.
但是,一旦我升级到.NET 4.5,这就破了.现在,当我传入无效的用户名和密码时,我收到HTTP响应:
HTTP/1.1 500 Internal Server Error
Cache-Control: private
Content-Type: application/json; charset=utf-8
Server: Microsoft-IIS/7.5
jsonerror: true
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Sat, 24 Nov 2012 22:42:33 GMT
Content-Length: 91
{"Message":"There was an error processing the request.","StackTrace":"","ExceptionType":""}
Run Code Online (Sandbox Code Playgroud)
基本上,异常类型丢失并替换为通用错误消息.
导致此行为发生变化的原因是什么,还有一种方法可以在JSON中返回异常信息吗?几乎我的整个API都依赖于这种行为.
啊,这是一个愚蠢的问题.只有在您有以下情况时才会显示例外信息
<customErrors mode="Off" />
Run Code Online (Sandbox Code Playgroud)
在你的web.config(下<system.web>)中.我实际上不确定这是否是.NET 3.5 - > .NET 4.5中的行为更改,或者当我使用web.config转换重写web.config构建过程时它是否已损坏.
有谁知道是否有办法在每个网络服务级别上控制这个?我宁愿不在正常页面请求上显示完整的调试信息.
更新:
我还得出结论,抛出异常以从Web服务传递错误信息实际上并不是一个好的设计.事实上,我在博客上为感兴趣的人写了一篇关于这个主题的帖子.
| 归档时间: |
|
| 查看次数: |
6670 次 |
| 最近记录: |