【问题标题】:Can a .Net application support both the AspCompat directive and WebSockets (used by SignalR) at the same time?.Net 应用程序能否同时支持 AspCompat 指令和 WebSockets(由 SignalR 使用)?
【发布时间】:2017-01-10 03:51:47
【问题描述】:

我正在从运行在 .Net 4.5.2 框架上的 Web 应用程序中的 Web 表单调用 COM 对象。我在使用 AspCompat="true" 页面指令时收到以下错误消息,这是调用 STA(单线程单元)COM 对象所必需的:

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.

错误消息指出我需要在 web.config 文件的应用设置中包含 aspnet:UseTaskFriendlySynchronizationContext = false。这解决了第一个异常,但会引发一个新异常,请求删除应用程序设置,因为应用程序还使用 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)

是否可以在 Web 表单中包含 AspCompat="true" 页面指令并在 .Net 应用程序的其他地方仍然使用 WebSockets(由 SignalR 使用)?

【问题讨论】:

    标签: asp.net signalr comobject


    【解决方案1】:

    是的。 SignalR 只是一个客户端 JavaScript 库加上服务器端的处理程序(不是同一个 ASP.NET 页面)。 另一方面,WebSockets 仅在 Windows 8 或更高版本中受支持,并且必须安装 Windows 功能。

    【讨论】:

    • 感谢您的回复。只是为了澄清这个问题,我试图确定 WebSockets(由 Signal R 使用)和 AspCompat="true" 页面指令是否可以在同一个应用程序中使用,因为 Asp.Net 需要存在 aspnet:UseTaskFriendlySynchronizationContext 应用程序设置一个,但另一个被删除。
    • 是的,他们可以。与此无关。
    猜你喜欢
    • 1970-01-01
    • 2018-05-18
    • 2017-01-13
    • 1970-01-01
    • 2013-03-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    相关资源
    最近更新 更多