当我尝试关闭响应时,抛出C#HTTPWebResponse异常

时间:2012-08-23 05:39:27

标签: c# ftpwebrequest

在包含行response.Close();

的finally块中抛出异常
try
{
    response = (FtpWebResponse)request.GetResponse();
}
catch (System.Net.WebException webEx)
{
    FtpWebResponse ftpResponse = (FtpWebResponse)webEx.Response;

    if (ftpResponse.StatusCode == FtpStatusCode.ActionNotTakenFileUnavailable)
    {
        return false;
    }

    throw;
}
finally
{
    if (response != null)
    {
        response.Close();
    }
}

继承堆栈跟踪:

   at System.Net.FtpWebRequest.SyncRequestCallback(Object obj)
   at System.Net.FtpWebRequest.RequestCallback(Object obj)
   at System.Net.CommandStream.Dispose(Boolean disposing)
   at System.IO.Stream.Close()
   at System.IO.Stream.Dispose()
   at System.Net.ConnectionPool.Destroy(PooledStream pooledStream)
   at System.Net.ConnectionPool.PutConnection(PooledStream pooledStream, Object owningObject, Int32 creationTimeout, Boolean canReuse)
   at System.Net.FtpWebRequest.FinishRequestStage(RequestStage stage)
   at System.Net.FtpWebRequest.SyncRequestCallback(Object obj)
   at System.Net.FtpWebRequest.RequestCallback(Object obj)
   at System.Net.CommandStream.Abort(Exception e)
   at System.Net.CommandStream.CheckContinuePipeline()
   at System.Net.FtpWebRequest.DataStreamClosed(CloseExState closeState)
   at System.Net.FtpDataStream.System.Net.ICloseEx.CloseEx(CloseExState closeState)
   at System.Net.FtpDataStream.Dispose(Boolean disposing)
   at System.IO.Stream.Close()
   at System.Net.FtpWebResponse.Close()
   at FVC.RequestForStock.Application.RequestForStockDataImportProvider.VerifyDirectoryExist(String serverAddress, String userName, SecureString password) in C:\CoName.RFS.Application\RFSDataImportProvider.cs:line 122

最后是调试检查器显示的内容

enter image description here

(如果您无法显示文本,请放大图片,例如在Firefox中按住ctrl并向上滚动鼠标滚轮) 有人可以协助确定异常发生的原因以及如何防止异常。 编辑:使用Microsoft.NET框架的v4.0

1 个答案:

答案 0 :(得分:0)

我还会检查流是否仍然可读。

       finally
        {
            if (response != null && 
                 response.GetResponseStream()!=null && 
                 response.GetResponseStream().CanRead)
                {
                    response.Close();
                }
            }