Может ли приложение .Net одновременно поддерживать директиву AspCompat и WebSockets (используемые SignalR)?

Я работаю над вызовом COM-объекта из веб-формы внутри веб-приложения, работающего на платформе .Net 4.5.2. Я получаю следующее сообщение об ошибке при использовании директивы страницы AspCompat="true", которая требуется для вызова COM-объекта STA (однопоточного апартамента):

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.InvalidOperationException: <%@ Page AspCompat="true" %> and <httpRuntime apartmentThreading="true" /> are unsupported in the current application configuration. To work around this, add the following configuration switch in Web.config:
<appSettings>
 <add key="aspnet:UseTaskFriendlySynchronizationContext" value="false" />
</appSettings>
For more information, see http://go.microsoft.com/fwlink/?LinkId=252465.

В сообщении об ошибке говорится, что мне нужно включить aspnet:UseTaskFriendlySynchronizationContext = false в настройки приложения в файле web.config. Это разрешает первое исключение, но вызывает новое исключение, запрашивающее удаление параметра приложения, поскольку приложение также использует веб-сокеты (используемые SignalR):

Exception information: 
    Exception type: InvalidOperationException 
    Exception message: WebSockets is unsupported in the current application configuration. To work around this, remove the following configuration switch in Web.config:
<appSettings>
  <add key="aspnet:UseTaskFriendlySynchronizationContext" />
</appSettings>
For more information, see http://go.microsoft.com/fwlink/?LinkId=252465.
   at System.Web.Util.SynchronizationContextUtil.ValidateMode(SynchronizationContextMode currentMode, SynchronizationContextMode requiredMode, String specificErrorMessage)
   at System.Web.HttpContext.AcceptWebSocketRequest(Func`2 userFunc, AspNetWebSocketOptions options)
   at Microsoft.AspNet.SignalR.Transports.WebSocketTransport.AcceptWebSocketRequest(Func`2 callback)
   at Microsoft.AspNet.SignalR.PersistentConnection.ProcessRequestPostGroupRead(HostContext context, String groupsToken)
   at Microsoft.AspNet.SignalR.TaskAsyncHelper.FromMethod[T1,T2,T3,TResult](Func`4 func, T1 arg1, T2 arg2, T3 arg3)

Можно ли включить директиву страницы AspCompat="true" в веб-форму и по-прежнему использовать WebSockets (используемые SignalR) в другом месте приложения .Net?


person Joshua Clark    schedule 09.01.2017    source источник


Ответы (1)


Да. SignalR — это просто клиентская библиотека JavaScript плюс обработчик на стороне сервера (не та же самая страница ASP.NET). С другой стороны, WebSockets поддерживаются только в Windows 8 или более поздней версии, и для этого необходимо установить компонент Windows.

person Ricardo Peres    schedule 09.01.2017
comment
Спасибо за ответ. Просто чтобы прояснить вопрос, я пытаюсь определить, могут ли WebSockets (используемые Signal R) и директива страницы AspCompat=true использоваться в одном и том же приложении, поскольку Asp.Net требует, чтобы параметр приложения aspnet:UseTaskFriendlySynchronizationContext существовал для одного, но быть удалены для другого. - person Joshua Clark; 09.01.2017
comment
Да, они могут. Ничего общего с этим. - person Ricardo Peres; 09.01.2017