Разница между WebOperationContext.current и HttpContext.Current

Я разрабатываю веб-и мобильные приложения для своих клиентов. В моей нынешней архитектуре многие ресурсы распределяются между доступом к сети и мобильным доступом. Страница aspx может отображаться в Интернете и вызываться на веб-просмотр в мобильном приложении. Мой вопрос:

В чем разница между объектами WebOperationContext.Current и HttpContext.Current?

По моему мнению, это один и тот же объект, но я заметил, что WebOperationContext.Current в некоторых случаях является нулевым, и я не понимаю, почему.

Ответ 1

WebOperationContext обычно используется в методе REST WCF, чтобы способ мог получить доступ к входящему запросу и исходящему отклику.

HttpContext обычно используется на странице ASP.NET WebForms или веб-методе веб-службы ASMX, когда доступен доступ к входящему запросу и исходящему отклику.

Они предназначены для разных типов проектов (WCF REST/ASP.NET WebForms), поэтому вы не должны использовать их в неправильном типе проекта.

О том, когда значение .Current равно null, это еще сложнее. Даже если вы вызываете это свойство в правильном типе проекта, вам нужно убедиться, что вызов выполнен в правильном потоке. Только в потоке, обрабатывающем запрос (который также отправляет ответ), вы можете получить доступ к текущему контексту. На любых других потоках (фоновые потоки или созданные вами потоки) вы получаете null. Это известно уже много лет, но новички по-прежнему иногда ошибаются.