1

我正在尝试从 ASP.NET 页面使用 DiscoveryClient 发现服务

void Page_Load(...) {
    ...
    var result = DiscoveryClient.Find(anyCriteria);
    ....
}

调用失败并出现异常:

System.InvalidOperationException:此上下文中不允许异步操作

堆栈跟踪:

在 System.Web.AspNetSynchronizationContext.OperationStarted() 在 System.ServiceModel.Discovery.DiscoveryClient.InitializeAsyncOperation(AsyncOperationContext context) 在 System.ServiceModel.Discovery.DiscoveryClient.FindAsyncOperation(FindCriteria 标准,对象 userState) 在 System.ServiceModel.Discovery.DiscoveryClient。 System.ServiceModel.Discovery.DiscoveryClient.Find(FindCriteria 标准)处的 FindAsync(FindCriteria 标准,对象 userState)

我尝试使用<%Page ... Async="true" %>没有任何改变。

如何在 ASP.NET 页面中正确调用 DiscoveryClient.Find?

4

2 回答 2

2

你设置了吗(web.config)

<appSettings>
     <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
</appSettings>

请参阅http://msdn.microsoft.com/en-us/library/hh975440.aspx

“对于启用 WebSockets 的应用程序、在 Web 窗体页面中使用基于任务的异步以及某些其他异步行为,必须设置此兼容性开关。”

我很确定最新的发现客户端使用 TPL。

于 2013-05-24T19:01:17.370 回答
1

AllowAsyncDuringSyncStages 选项必须设置为“true”。

<appSettings>
      <add key="aspnet:AllowAsyncDuringSyncStages" value="true" />
</appSettings>

这仅适用于由 UseTaskFriendlySynchronizationContext 设置强制执行的 AspNetSynchronizationContext。有关详细信息,请参阅肯尼斯的答案。

于 2013-05-25T10:38:08.747 回答