Время ожидания вызова веб-службы CLR составляет 100 секунд - PullRequest
0 голосов
/ 09 апреля 2011

Я не нашел нигде ответа.У меня есть функция CLR, которая выполняет вызов веб-метода моего приложения .NET (.asmx).Веб-служба успешно выполняется при прямом вызове, но при вызове через CLR она истекает через 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 без эффекта:

WebExec svc = new WebExec();<br/>
svc.Timeout = 3600000;  // set timeout to 1 hour<br/>
result = svc.ExecuteReport(userID, reportTypeList.ToString(),
                           deliverToUserList.ToString());

Я хочу получить возвращенный результат, поэтому асинхронное выполнение веб-службы не является решением.Где еще можно переопределить параметры тайм-аута для вызова SQL CLR?Спасибо за любую помощь, вы можете предоставить.

Вот код для функции.Я могу выполнить веб-сервис, тайм-аут происходит только при выполнении через 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, и оба заканчиваются 100-секундным таймаутом.Вот оба звонка, которые я пробовал:

Синхронный:WebExec svc = new WebExec ();svc.Timeout = 3600000;// установить время ожидания на 1 час result = svc.ExecuteReport (userID, reportTypeList.ToString (), deliveryToUserList.ToString ());

Асинхронный:WebExec svc = new WebExec ();IAsyncResult result = svc.BeginExecuteReport (userID, reportTypeList.ToString (), deliveryToUserList.ToString (), null, null);result.AsyncWaitHandle.WaitOne ();retStr = svc.EndExecuteReport (result);

1 Ответ

0 голосов
/ 09 апреля 2011

В вашем сообщении об ошибке указывается, что тайм-аут исходит от SQL Server.

Вы пытались обновить статистику SQL Server (или перестроить индексы)?

Можете ли вы опубликовать код своего CLRфункционировать?

...