如何同步调用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页面正确吗?
是否设置了(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设置强制的。