Здравсвуйте! Есть некоторая проблема с написанным мной исходным кодом.
При запуске Бизнес-процесса при получении сигнала от объекта или таймера, где в задании сценарии вызывается вебсервис и метод без передачи параметров(плюс вдобавок это метод void), вызывается такая ошибка:
System.ServiceModel.ServiceActivationException: Set AspNetCompatibilityEnabled true
в Terrasoft.Web.Common.BaseService.get_UserConnection()
в Terrasoft.Configuration.WebService1C.UpdatesBankNameAndAdresAll()
в Terrasoft.Core.Process.qrtProcess_f3c9148MethodsWrapper.ScriptTask1Execute(ProcessExecutingContext context)
в Terrasoft.Core.Process.ProcessScriptTask.InternalExecute(ProcessExecutingContext context)
в Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)
Хотя при ручном запуске все работает нормально, как ее можно исправить?
Нравится
Возможно не передается UserConnection, добавь в БП
var userConnection = Get<UserConnection>("UserConnection");
WebService1C service = new WebService1C(userConnection);
а, в схему добавь:
public UserConnection UserConnection {
get;
private set;
}
public WebService1C(UserConnection userConnection) {
UserConnection = userConnection;
}
Вызываю вебсервис и метод так:
WebService1C service = new WebService1C();
service.UpdatesBankNameAndAdresAll();
return true;
Самое примечательное, что, если добавить перед запуском элемент "Вопрос пользователю" и добавить ответ положительный, а также ответить на него при вызове сигнала от объекта или таймера или добавить элемент "Автогенирируемая страница", то все также работает нормально.
Также когда вебсервис и метод вызывается в коде джаваскрипта при помощи SrrviceHelper, тоже все работает нормально.
Вот код метода:
[OperationContract]
[WebInvoke(Method = "GET", BodyStyle = WebMessageBodyStyle.Wrapped,
RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
public void UpdatesBankNameAndAdresAll() {
string guid1cBank = "";
Guid id = new Guid();
var esqBank = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "AccountBillingInfo");
esqBank.AddAllSchemaColumns();
var banks = esqBank.GetEntityCollection(UserConnection);
foreach (var bankItem in banks) {
guid1cBank = bankItem.GetTypedColumnValue<string>("qrtGuid1cBank");
id = bankItem.GetTypedColumnValue<Guid>("Id");
if(guid1cBank != String.Empty){
UpdatesBankNameAndAdresOne(id);
}
}
}
Возможно не передается UserConnection, добавь в БП
var userConnection = Get<UserConnection>("UserConnection");
WebService1C service = new WebService1C(userConnection);
а, в схему добавь:
public UserConnection UserConnection {
get;
private set;
}
public WebService1C(UserConnection userConnection) {
UserConnection = userConnection;
}
Да, вы правы, но частично
Вот что надо добавить в веб-сервис, чтобы можно было его использовать(вызывать в коде Js и БП) нормально:
public WebService1C() {}
public WebService1C(UserConnection userConnection) {
this._userConnection = userConnection;
}
private UserConnection _userConnection;
protected UserConnection UserConnection {
get {
if (_userConnection != null) {
return _userConnection;
}
_userConnection = CurrentHttpContext.Session ["UserConnection"] as UserConnection;
if (_userConnection != null) {
return _userConnection;
}
var appConnection = (AppConnection)CurrentHttpContext.Application ["AppConnection"];
_userConnection = appConnection.SystemUserConnection;
return _userConnection;
}
}
private HttpContextBase _httpContext;
protected virtual HttpContextBase CurrentHttpContext {
get { return _httpContext ?? (_httpContext = new HttpContextWrapper (HttpContext.Current)); }
set { _httpContext = value; }
}
в Using прописано это:
using System;
using System.Configuration;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.ServiceModel.Activation;
using Terrasoft.Common;
using Terrasoft.Core;
using Terrasoft.Core.Entities;
using Terrasoft.Web.Common;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using System.Collections.ObjectModel;
using System.Data;
using Newtonsoft.Json;
using Terrasoft.Core.DB;
using System.Runtime.Serialization;
Атюкин Егор Эдуардович,
прочитайте про веб сервисы здесь
Описанное Вами выше поведение говорит о том, что если процесс минует пользователя, то UserConnection отсутствует в текущем контексте