【问题标题】:Can't catch exception in try-catch C#无法在 try-catch C# 中捕获异常
【发布时间】:2017-08-07 15:02:50
【问题描述】:

这个异常被抛出了,我显然没有办法捕捉它:

无法建立连接,因为目标机器主动拒绝了它 127.0.0.1:10000

来源:

Line 102:            try
Line 103:            {
Line 104:                var blobClient = GetClient();  <-- throws here
Line 105:                var container = blobClient.GetContainerReference(containerName);
Line 106:                container.CreateIfNotExists(BlobContainerPublicAccessType.Blob);

源文件:...Blob.cs 行:104

整个函数:

private static CloudBlobContainer GetContainer(string containerName)
{
    try
    {
        var blobClient = GetClient();
        var container = blobClient.GetContainerReference(containerName);
        container.CreateIfNotExists(BlobContainerPublicAccessType.Blob);
        return container;
    }
    catch (HttpException ex)
    {
        Helpers.Error.Functions.RecordError(ex);
        throw new HttpException(500, "Could not connect.");
    }
}

GetClient() 函数:

private static CloudBlobClient GetClient()
{
    try
    {
        var account = CloudStorageAccount.Parse(Settings.Deployment.AzureConnectionString);
        return account.CreateCloudBlobClient();
    }
    catch (Exception ex)
    {
        Helpers.Error.Functions.RecordError(ex);
        throw new HttpException(500, "Could not connect GetClient.");
    }
}

堆栈跟踪:

[SocketException (0x274d): 无法建立连接,因为 目标机器主动拒绝它 127.0.0.1:10000]
System.Net.Sockets.Socket.DoConnect(端点 endPointSnapshot, SocketAddress socketAddress) +520
System.Net.ServicePoint.ConnectSocketInternal(布尔连接失败, Socket s4, Socket s6, Socket&socket, IPAddress&地址, ConnectSocketState 状态、IAsyncResult asyncResult、Exception& 例外)+621

[WebException:无法连接到远程服务器]
System.Net.HttpWebRequest.GetResponse() +1724
Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync(RESTCommand`1 cmd, IRetryPolicy 策略, OperationContext operationContext) 中 c:\程序文件 (x86)\Jenkins\workspace\release_dotnet_master\Lib\ClassLibraryCommon\Core\Executor\Executor.cs:699

[StorageException:无法连接到远程服务器]
Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync(RESTCommand`1 cmd, IRetryPolicy 策略, OperationContext operationContext) 中 c:\程序文件 (x86)\Jenkins\workspace\release_dotnet_master\Lib\ClassLibraryCommon\Core\Executor\Executor.cs:604 Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer.CreateIfNotExists(BlobContainerPublicAccessType accessType、BlobRequestOptions requestOptions、OperationContext operationContext) 在 c:\Program Files (x86)\Jenkins\workspace\release_dotnet_master\Lib\ClassLibraryCommon\Blob\CloudBlobContainer.cs:233 C3.Code.Controls.Application.Storage.Blob.Blob.GetContainer(字符串 容器名称)在 ...Blob.cs:104
C3.Code.Controls.Application.Storage.Blob.Blob.AddBlob(字符串 D:\Dropbox 中的容器名称、字符串 blobReference、字节 [] 字节) (Scirra Ltd)\汤姆\C3 网站\C3Alpha2\Code\Controls\Application\Storage\Blob\Blob.cs:87
D:\Dropbox (Scirra) 中的 C3.Code.Callbacks.Application.ApplicationStart() Ltd)\Tom\C3 网站\C3Alpha2\Code\Callbacks\Application.cs:26
D:\Dropbox 中的 C3.Global.Application_Start(Object sender, EventArgs e) (Scirra Ltd)\Tom\C3 网站\C3Alpha2\Global.asax.cs:30

[HttpException (0x80004005): 无法连接到远程服务器]
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext 上下文,HttpApplication 应用程序)+534
System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext、HttpContext 上下文、MethodInfo[] 处理程序)+186
System.Web.HttpApplication.InitSpecial(HttpApplicationState 状态, MethodInfo[] 处理程序、IntPtr appContext、HttpContext 上下文)+175
System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext、HttpContext 上下文)+424
System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +360

[HttpException (0x80004005): 无法连接到远程服务器]
System.Web.HttpRuntime.FirstRequestInit(HttpContext 上下文) +539
System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext 上下文) +118 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest WR,HttpContext 上下文)+730

【问题讨论】:

  • 这可能是你在VS中调试时的行为,VS中有异常设置,你需要调整一下
  • 我有点困惑你删除了旧问题而不是编辑它。
  • 你只是想抓住一个HttpException,其他的都不会被抓住。我认为你的例外实际上是SocketException
  • 您是否尝试过捕获 WebException?
  • 对不起@Mighty,我以为我已经解决了,所以不想浪费任何人的时间。原来我没有解决。

标签: c# asp.net exception exception-handling try-catch


【解决方案1】:

来自您发布的异常消息:

[SocketException (0x274d): 无法建立连接,因为目标机器主动拒绝了它 127.0.0.1:10000]

请注意,这是 SocketException,而不是 HttpException,但您的代码是这样写的:

catch (HttpException ex)

所以它没有被抓住。要么使用通用 Exception 捕获所有内容,要么切换到捕获 SocketException

【讨论】:

  • 但他捕获所有异常,然后将它们包装到 GetClient 中的HttpException 中。
  • @Evk 然后我们可能正在查看不同的代码,堆栈跟踪清楚地表明异常是SocketException
  • 是的,但是作者声称GetClient抛出,它只能抛出HttpException,因为OP在那里捕获所有异常,然后手动抛出HttpException。无论如何,似乎毕竟不是 GetClient 抛出的。
  • @Evk 我知道,但声称与现实往往大相径庭。我们拥有的唯一绝对可靠的信息是堆栈跟踪(因为简化/伪造它非常耗时)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-05
  • 2014-03-22
  • 1970-01-01
  • 2012-08-06
  • 1970-01-01
  • 2020-02-28
  • 2015-06-21
相关资源
最近更新 更多