Получение HTTPContext

Здравствуйте! Такая ситуация когда выполняется вызов метода получения UserConnection

через БП, то возникает ошибка, если на прямую из клиента через сервис, но всё нормально, ошибок нет. В чем здесь дело?

Изображение удалено.

 

Нравится

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

Добрый день, Александр.

Получение экземпляра UserConnection из объекта HttpContext (контекст запроса) возможно только в рамках веб-запроса к сервису. При вызове метода сервиса вручную (например, если создать экземпляр класса сервиса и вызвать нужный метод) нет контекста запроса, поэтому, при получении вы получаете ошибку.

При написании веб сервисов хорошая практика - не писать код обработки непосредственно в методах сервиса, а писать её в рамках некоторого вспомогательного класса. В класс следует добавить конструктор, который принимает объект UserConnection.

При вызове из метода сервиса, вы можете создать экземпляр данного вспомогательного класса и передать в конструктор экземпляр UserConnection, получив его из объекта HttpContext (как вы делаете в примере), а затем вызвать нужный метод вспомогательного класса.

При необходимости вызвать тот же код в другом месте, вы так же создаете экземпляр данного вспомогательного класса, передаете ему экземпляр UserConnection (способ его получения будет отличаться от использования в сервисе), а затем тек же вызвать нужный метод вспомогательного класса.

Получить экземпляр UserConnection в бизнес-процессах можно следующими способами (в зависимости от того интерпретируемый процесс, или нет):

var userConnection = Get<UserConnection>("UserConnection");
​var userConnection = context.UserConnection;

В рамках процессов объектов можно воспользоваться одноименным свойством - UserConnection.

Добрый день, Александр.

Получение экземпляра UserConnection из объекта HttpContext (контекст запроса) возможно только в рамках веб-запроса к сервису. При вызове метода сервиса вручную (например, если создать экземпляр класса сервиса и вызвать нужный метод) нет контекста запроса, поэтому, при получении вы получаете ошибку.

При написании веб сервисов хорошая практика - не писать код обработки непосредственно в методах сервиса, а писать её в рамках некоторого вспомогательного класса. В класс следует добавить конструктор, который принимает объект UserConnection.

При вызове из метода сервиса, вы можете создать экземпляр данного вспомогательного класса и передать в конструктор экземпляр UserConnection, получив его из объекта HttpContext (как вы делаете в примере), а затем вызвать нужный метод вспомогательного класса.

При необходимости вызвать тот же код в другом месте, вы так же создаете экземпляр данного вспомогательного класса, передаете ему экземпляр UserConnection (способ его получения будет отличаться от использования в сервисе), а затем тек же вызвать нужный метод вспомогательного класса.

Получить экземпляр UserConnection в бизнес-процессах можно следующими способами (в зависимости от того интерпретируемый процесс, или нет):

var userConnection = Get<UserConnection>("UserConnection");
​var userConnection = context.UserConnection;

В рамках процессов объектов можно воспользоваться одноименным свойством - UserConnection.

Семенов Александр Евгеньевич,

Спасибо большое за ответ, разобрался всё работает)

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