发生异常时,httpwebrequest async呼叫执行订单



我使用httpwebrequest进行async调用Web服务,有时 endgetResponse()返回一些例外。但是,即使我有例外,呼叫也成功并返回数据。以下是我的代码,并删除了错误检查代码。我有4个日志项目,订单就是这样:

返回以下结果:...
GetResult成功了!
Postxml例外:...
GetResult例外:...

    public async Task<string> GetResult(string xmlData)
    {
        try
        {
            string response = await PostXML(Url, xmlData).ConfigureAwait(false);
            _logger.Log($"GetResult is successful!");
            return response;
        }
        catch (Exception ex)
        {
            _logger.Log("GetResult exception: " + ex.ToString());
            throw;
        }
    }
    private async Task<string> PostXML(string destinationUrl, string requestXml)
    {
        try
        {
            byte[] bytes = System.Text.Encoding.ASCII.GetBytes(requestXml);
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(destinationUrl);
            Stream requestStream = request.GetRequestStream();
            requestStream.Write(bytes, 0, bytes.Length);
            requestStream.Close();
            HttpWebResponse response = (HttpWebResponse)await Task.Factory
                .FromAsync<WebResponse>(request.BeginGetResponse, request.EndGetResponse, null);
            if (response.StatusCode == HttpStatusCode.OK)
            {
                Stream responseStream = response.GetResponseStream();
                string responseStr = new StreamReader(responseStream).ReadToEnd();
                _logger.Log("The following result is returned: rn" + responseStr);
                responseStream.Close();
                return responseStr;
            }
        }
        catch (Exception ex)
        {
            _logger.Log("PostXML exception: " + ex.ToString());
            throw;
        }
        return null;
    }

例外是这样:
postxml()异常:System.NET.WebException:基础连接已关闭:服务器预计将保持活跃的连接已被服务器关闭。
在system.net.httpwebrequest.endgetresponse(iasyncresult asyncresult)
在system.threading.tasks.taskFactory 1.FromAsyncCoreLogic(IAsyncResult iar, Func 2端功能,操作1 endAction, Task 1 Promise,Boolean Meedialsynchronization)
---堆栈跟踪的结束来自以前的位置,该位置被抛出了---
在system.runtime.com.pilerservices.taskawaiter.throwfornonsuccess(任务任务)
在system.runtime.com.pilerservices.taskawaiter.handlenonsuccessanddebuggernotification(任务任务)
在myService.d__7.movenext()

我想我还没有完全了解HTTPWebRequest在异步模式下的工作方式。无论如何,我希望这些问题可以帮助我更多地了解:
1。为什么执行甚至发生了例外?在我的理解中,只有2个日志项目可以记录例外。
2。例外"基础连接已关闭"的原因是什么?为什么发生例外,但该服务仍然给出了正确的结果?

为什么执行甚至发生例外?在我的理解中,只有2个日志项目可以记录例外。

这是不可能的。我怀疑您的代码两次调用GetResult。这就是日志似乎表示的。

发生"基础连接已关闭"的原因是什么?

当服务器准备好关闭客户端之前,这会发生这种情况。这是从REST API中获得的不寻常错误,但不是闻所未闻的。

相关内容

  • 没有找到相关文章

最新更新