2010-01-05 19 views
0

我打电话其中被标记为单向一个ASP.NET web服务。我在try catch块中封装了调用Web服务的代码,但它没有捕获Web服务抛出的异常。当我在浏览器中输入URL分别测试web服务,它抛出一个错误,但是异常不会被发送到某种原因调用代码。这里是示例代码如何捕捉从单向异常(发射后不管)ASP.NET Web服务调用

/// <summary> 
/// Summary description for WebService 
/// </summary> 
[WebService(Namespace = "http://mycompany.com/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[ToolboxItem(false)] 
public class TestWebService : System.Web.Services.WebService 
{ 
    [SoapDocumentMethod(OneWay = true)] 
    [WebMethod(Description="Start a long running process.")] 
    public void LongRunningProcess() 
    { 
     //do some long process 
    } 
} 

//calls proxy class method 
TestWebService testWebService = new TestWebService(); 
testWebService.Timeout = Timeout.Infinite; 
testWebService.Credentials = CredentialCache.DefaultCredentials; 
testWebService.Url = <url> //the web service url 
testWebService.LongRunningProcess() 

任何帮助,将不胜感激。

+0

请注意try catch块用于调用代码上面没有显示,但我测试通过添加它并调用webservice时异常没有抛出。 – RKP 2010-01-05 16:09:05

回答

2

我不相信你可以。

陈述的方法的要点是一个方法是将其标记为发射后不管,客户不必等待要调用的方法。

一旦服务器解析该请求,并且它实际上调用方法常常之前,它返回HTTP 202,在该点,客户端移动上。

+1

正确。根据定义,OneWay方法无法向呼叫方报告有关呼叫成功或失败的任何信息。 – GalacticCowboy 2010-01-05 16:50:21

+0

我认为这是一种单向web服务调用的限制。相反,最好是异步调用它并实现回调方法来捕获任何异常,除非有更好的方法来在用户单击按钮时从Web界面执行长时间运行的进程。我想过在单独的线程上运行该进程,但不知道如果用户在中途关闭浏览器会发生什么情况。所以我所做的就是将用户输入存储在数据库中,并通过调度程序在后台调用Web服务来执行它。该过程大约需要15分钟才能完成。用户可以检查状态 – RKP 2010-01-07 11:18:55