如何同步调用DiscoveryClient.在ASP.NET中查找

本文关键字:ASP NET 查找 DiscoveryClient 调用 何同步 同步 | 更新日期: 2023-09-27 18:15:05

我正在尝试从ASP使用DiscoveryClient发现服务。净页

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

调用失败并出现异常:

系统。InvalidOperationException:在这个上下文中不允许异步操作

异常堆栈

:

在System.Web.AspNetSynchronizationContext.OperationStarted ()在System.ServiceModel.Discovery.DiscoveryClient。InitializeAsyncOperation (AsyncOperationContext上下文)在System.ServiceModel.Discovery.DiscoveryClient。FindAsyncOperation(FindCriteria标准,对象userState)在System.ServiceModel.Discovery.DiscoveryClient。FindAsync(FindCriteria标准,对象userState)在System.ServiceModel.Discovery.DiscoveryClient。找到(FindCriteria标准)

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

如何调用DiscoveryClient。在ASP中查找。. NET页面正确吗?

如何同步调用DiscoveryClient.在ASP.NET中查找

是否设置了(web.config)

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

见http://msdn.microsoft.com/en-us/library/hh975440.aspx

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

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

AllowAsyncDuringSyncStages选项必须设置为'true'。

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

这只适用于AspNetSynchronizationContext,它是由UseTaskFriendlySynchronizationContext设置强制的。