我還沒有發現這種回答的任何地方。我有一個CLR函數來執行.NET應用程序(.asmx)的web方法調用。 Web服務時直接調用,但成功執行時通過CLR它始終與下面的錯誤稱爲在100個秒後:CLR Web服務調用超時規定100秒
Msg 6522, Level 16, State 1, Line 1
A .NET Framework error occurred during execution of user-defined routine or aggregate "fn_ExecuteReport":
System.Net.WebException: The operation has timed out
System.Net.WebException:
at System.Web.Services.Protocols.WebClientProtocol.GetWebResponse(WebRequest request)
at System.Web.Services.Protocols.HttpWebClientProtocol.GetWebResponse(WebRequest request)
at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
at DD.WebServices.WebExec.ExecuteReport(String ddBotID, String serverKey, Int32 ddUserID, String reportReportTypeList, String deliverToUserList)
at ExecuteReport.GetResult(Int32 userID, SqlString reportList, SqlString deliverToUserList)
我在fn_ExecuteReport增加了Web服務代理超時無影響:
WebExec svc = new WebExec();<br/>
svc.Timeout = 3600000; // set timeout to 1 hour<br/>
result = svc.ExecuteReport(userID, reportTypeList.ToString(),
deliverToUserList.ToString());
我想捕捉返回的結果,以便執行異步Web服務是不是一個解決方案。我可以在哪裏重寫SQL CLR調用的超時設置?感謝您的任何幫助,您可以提供。
下面是該函數的代碼。我能夠執行webservice,超時只發生在通過CLR執行時。
ALTER FUNCTION [dbo].[fn_ExecuteReport]
(@UserID int, @ReportTypeList nvarchar(max), @DeliverToUserList nvarchar(max))
RETURNS [nvarchar](255)
WITH EXECUTE AS CALLER AS EXTERNAL NAME [MyCLRLib].[ExecuteReport].[GetResult]
我已經嘗試了對CLR函數中的Web服務的同步和異步調用,並且都以100秒超時結束。這是我嘗試過的兩個調用:
Synchronous:
WebExec svc = new WebExec(); svc.Timeout = 3600000; //設置超時到1個小時 結果= svc.ExecuteReport(用戶ID,reportTypeList.ToString(),deliverToUserList.ToString());
異步:
WebExec svc = new WebExec();
IAsyncResult的結果= svc.BeginExecuteReport(用戶ID,reportTypeList.ToString(),deliverToUserList.ToString(),NULL,NULL);
result.AsyncWaitHandle.WaitOne();
retStr = svc.EndExecuteReport(result);
,這只是該函數的存根。如何張貼代碼... – 2011-04-10 00:57:19
我加了上面的功能的膽量。我試着讓Web服務調用同步和異步沒有成功。謝謝你看看。 – 2011-04-10 02:18:33
「我在上面添加了功能的內涵」 - 在哪裏? – 2011-04-10 02:19:30