Проблема с исходным кодом

Здравсвуйте! Есть некоторая проблема с написанным мной исходным кодом.

При запуске Бизнес-процесса при получении сигнала от объекта или таймера, где в задании сценарии вызывается вебсервис и метод без передачи параметров(плюс вдобавок это метод 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)

Хотя при ручном запуске все работает нормально, как ее можно исправить?

Нравится

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

Возможно не передается 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 отсутствует в текущем контексте

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