Может ли приложение.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. Это разрешает первое исключение, но вызывает новое исключение, запрашивая удаление настройки приложения, так как приложение также использует WebSockets (используемый 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?

1 ответ

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

Другие вопросы по тегам