我需要了解如何从异步 Web 服务请求中获取 HttpResponseMessageProperty。
我正在尝试将 C# 控制台应用程序迁移到 Azure 函数应用程序,并且连接服务中现在唯一可用的方法是异步的。
我得到的错误是:
System.Private.ServiceModel: This OperationContextScope is being disposed out of order.
根据我的阅读,该错误可能是 OperationContextScope 在不同线程上运行的结果,而 OperatonContextScope 是线程特定的。
MS docs 网站上有一些建议,其中指出:
如果您需要为异步调用调用“等待”,请在 OperationContextScope 块之外使用它。
不知道我是如何做到这一点的,因此我的问题在这里。
这是我的代码:
BasicHttpBinding binding = new BasicHttpBinding(BasicHttpSecurityMode.Transport)
{
AllowCookies = true,
SendTimeout = new TimeSpan(0, httpTimeout, 0),
ReceiveTimeout = new TimeSpan(0, httpTimeout, 0),
MaxBufferSize = int.MaxValue,
MaxReceivedMessageSize = int.MaxValue
};
/* set the https endpoint and create the service client object */
EndpointAddress serviceEndpoint = new EndpointAddress(serviceBaseUrl + serviceName);
AuthenticationServicePortTypeClient service = new AuthenticationServicePortTypeClient(binding, serviceEndpoint);
/* set the request attributes and login */
Login loginRequest = new Login()
{
UserName = authUser,
Password = authPass,
DatabaseInstanceId = databaseInstance,
DatabaseInstanceIdSpecified = true
};
using (new OperationContextScope(service.InnerChannel))
{
LoginResponse1 loginResponse = await service.LoginAsync(loginRequest);
if (loginResponse.LoginResponse.Return)
{
HttpResponseMessageProperty response = (HttpResponseMessageProperty)OperationContext.Current.IncomingMessageProperties[HttpResponseMessageProperty.Name];
sessionCookie = response.Headers["Set-Cookie"];
}
}
在 HttpResponseMessageProperty 行上抛出异常。
我只需要能够从标头中获取 cookie。
任何帮助将不胜感激。