0

我需要了解如何从异步 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。

任何帮助将不胜感激。

4

1 回答 1

0

在没有看到完整的方法和调用代码的情况下,我只是推测您没有等待该代码,并且在执行抛出异常的行时已经处理了一些东西。

于 2019-05-01T16:02:18.247 回答