Тайм аут вызова веб-сервиса на клиенте

Доброго времени суток, подскажите пожалуйста, как можно задать время выполнения веб-сервиса со сторона JavaScript?



По умолчанию как я понял стоит секунд 30, после отваливается с ошибкой "Превышен лимит времени выполнения запроса к серверу приложений статус ответа..."

Вызываю обычный сервис так:

ServiceHelper.callService("ServiceName", "ServiceMethodPost", function(response) {
	window.console.log(response);
}, serviceData, this);

 

Нравится

5 комментариев
Лучший ответ

Сериков Асхат Кайратович,

Данный вариант правильный

var config = {
		serviceName: "ServiceName",
		timeout: 100000
	};
var serviceData = {
	phoneNumber: phoneNumber ? phoneNumber : "",
	userName: contact.displayValue,
	email: email ? email : ""
};
ServiceHelper.callService(config, "ServiceMethodPost",  function(response) {
	window.console.log(response);
}, serviceData, this);

Логика ServiceHelper выглядит так:

define("ServiceHelper", ["ext-base", "terrasoft"], function(Ext, Terrasoft) {
 
	/**
	 * ######## ##### ###-#######.
	 * @param {String|Object} config ### ####### ### ######### ###### #######.
	 * @param {String} methodName ### ######.
	 * @param {Function} callback (optional) ####### ######### ######.
	 * @param {Object} data (optional) ###### # ####### #######.
	 * @param {Object} scope (optional) ######## ######.
	 * @return {Object} ######### #######.
	 */
	function internalCallService(config, methodName, callback, data, scope) {
		var serviceName;
		if (config && Ext.isObject(config)) {
			serviceName = config.serviceName;
			methodName = config.methodName;
			callback = config.callback;
			data = config.data;
			scope = config.scope;
		} else {
			serviceName = config;
		}
		var dataSend = data || {};
		var workspaceBaseUrl = Terrasoft.utils.uri.getConfigurationWebServiceBaseUrl();
		var requestUrl = workspaceBaseUrl + "/rest/" + serviceName + "/" + methodName;
		var requestConfig = {
			url: requestUrl,
			headers: {
				"Accept": "application/json",
				"Content-Type": "application/json"
			},
			method: "POST",
			jsonData: Ext.encode(dataSend),
			callback: function(request, success, response) {
				if (!callback) {
					return;
				}
				var responseObject = response;
				if (success) {
					responseObject = Terrasoft.decode(response.responseText);
				}
				callback.call(this, responseObject, success);
			},
			scope: scope || this
		};
		if (config && config.timeout) {
			requestConfig.timeout = config.timeout;
		}
		return Terrasoft.AjaxProvider.request(requestConfig);
	}
 
	return {
		callService: internalCallService
	};
});

 

Добрый день!

Timeout указывается в конфиге вызова сервиса (параметр timeout).

В вашем случае будет так:

var config = {
		serviceName: "ServiceName",
		timeout: 100000
	};
ServiceHelper.callService(config, "ServiceMethodPost",  function(response) {
	window.console.log(response);
}, serviceData, this);

 

Сидоров Александр В.,

Спасибо

var serviceData = {
	phoneNumber: phoneNumber ? phoneNumber : "",
	userName: contact.displayValue,
	email: email ? email : ""
};
ServiceHelper.callService("ServiceName", "MethodName", function(response) {
	window.console.log(response);
}, serviceData, this);

В моем случае в serviceData есть другие параметры веб сервиса, их нужно будет в отдельный объект выложить? Не совсем понимаю как БПМ определит что является обычным параметром, а что конфигурационным

Сериков Асхат Кайратович,

Данный вариант правильный

var config = {
		serviceName: "ServiceName",
		timeout: 100000
	};
var serviceData = {
	phoneNumber: phoneNumber ? phoneNumber : "",
	userName: contact.displayValue,
	email: email ? email : ""
};
ServiceHelper.callService(config, "ServiceMethodPost",  function(response) {
	window.console.log(response);
}, serviceData, this);

Логика ServiceHelper выглядит так:

define("ServiceHelper", ["ext-base", "terrasoft"], function(Ext, Terrasoft) {
 
	/**
	 * ######## ##### ###-#######.
	 * @param {String|Object} config ### ####### ### ######### ###### #######.
	 * @param {String} methodName ### ######.
	 * @param {Function} callback (optional) ####### ######### ######.
	 * @param {Object} data (optional) ###### # ####### #######.
	 * @param {Object} scope (optional) ######## ######.
	 * @return {Object} ######### #######.
	 */
	function internalCallService(config, methodName, callback, data, scope) {
		var serviceName;
		if (config && Ext.isObject(config)) {
			serviceName = config.serviceName;
			methodName = config.methodName;
			callback = config.callback;
			data = config.data;
			scope = config.scope;
		} else {
			serviceName = config;
		}
		var dataSend = data || {};
		var workspaceBaseUrl = Terrasoft.utils.uri.getConfigurationWebServiceBaseUrl();
		var requestUrl = workspaceBaseUrl + "/rest/" + serviceName + "/" + methodName;
		var requestConfig = {
			url: requestUrl,
			headers: {
				"Accept": "application/json",
				"Content-Type": "application/json"
			},
			method: "POST",
			jsonData: Ext.encode(dataSend),
			callback: function(request, success, response) {
				if (!callback) {
					return;
				}
				var responseObject = response;
				if (success) {
					responseObject = Terrasoft.decode(response.responseText);
				}
				callback.call(this, responseObject, success);
			},
			scope: scope || this
		};
		if (config && config.timeout) {
			requestConfig.timeout = config.timeout;
		}
		return Terrasoft.AjaxProvider.request(requestConfig);
	}
 
	return {
		callService: internalCallService
	};
});

 

Сидоров Александр В.,

Понял, пойду попробую спасибо,

Сидоров Александр В.,

В целом все так как вы и сказали, только раз присутствует конфиг, то все остальные параметры(данные, scope, callback) нужно так же перенести в него, иначе они перезатрутся при вызове. Спасибо!

Показать все комментарии