2010-06-01 155 views
0

我有接受下列类型的参数,一个WebMethod:Web服务异常处理

[WebMethod] 
User(long userid,int number) 

当客户端发送的参数与不同类型的我想,我必须抓住这个错误,并写入到数据库等

例如ArgumentExceptions ...

我该如何解决这个问题?

谢谢。

+1

如何在不提供正确参数类型的情况下调用Webservice上的方法? – KroaX 2010-06-01 08:11:21

+1

@KroaX有可能。尽管大多数调用web服务的c#应用程序都将在编译时进行验证,但这并不适用于让我们说例如访问该服务的javascript客户端。 – TimothyP 2010-06-01 08:14:20

+0

你想在服务器或客户端上捕获它吗? – 2010-06-01 17:32:48

回答

1

您是否尝试过在客户端使用错误的类型时会发生什么情况?

我希望SOAP库能够捕获这个并引发异常。

在您自己的方法中,您只能检查传入参数的。这就像一个正常的(非网络)方法。

+0

这正是我的意思。我无法在SOAP扩展中找到处理方法。 – Jack 2010-06-01 09:12:42

0

您可以用下面的办法:

每个web方法将总是返回某种WebMethodResult的。

例如

[WebMethod] 
public WebMethodResult DoSomethng(guid p_userId) 
{ 

IfMethodIsSuccessful() 
{ 
    WebMethodResultSuccess successResult = new WebMethod(); 
    // Add required information into web method result object 

    return successResult; 
} 
else 
{ 
    WebMethodResultFailure failedResult = new WebMethodResultFailure(); 
    return failedResult; 
} 

} 

理念这里是每当调用Web方法将返回某种对象。

在这种情况下,WebMethodResult将是父类和WebMethodResultSuccess和WebMethodResult失败会从父类继承。

除了IsMethodIsSuccessfull,您可以添加自己的逻辑,将所有内容都包装到try catch块中并返回成功/失败结果。

如果调用从Java脚本或jQuery的网页的方法,该异常不会被除非你使用SOAP或某种替代性的回传给客户端。通过发回自定义对象,您可以通过javascrip/jquery阅读它们并向用户显示适当的消息。

希望这是有道理的。

0

在日志记录方面,您应该编写一个通用的异常处理层或查看开源替代方案。

您将捕获特定异常并将其传递给异常处理层。在该层(dll)中,您将在数据库中记录异常或写入平面文件。数据库可能是更好的选择,因为可以轻松分析数据。

另一种方法是登录到Windows事件日志,但我个人不喜欢这个,因为它并不易产生异常的统计数据,我认为它有大小限制。