2014-05-12 43 views
0

我在这里不知所措。我为我的一个网站创建了一个API(如果它具有任何价值,那么这个API就是本地托管的,以便于开发)。我尝试通过简单的GET请求传递一些信息,但我遇到了一个大问题。WebClient.DownloadString(“https:// ....”)崩溃。没有例外

Dim wc As WebClient = New WebClient() 
Dim ServerResponse As String = wc.DownloadString(New Uri(entireRequest)) 
MsgBox("This will NEVER be run") 

上述代码正在单独的线程中运行。问题是,当调用DownloadString行时,以后不会运行其他代码。我曾尝试在该行之后设置断点,但没有找到。

A Try...Catch块什么都不做。我试过捕获Net.WebExceptions和System.Exceptions。什么都没有发现。我的断点End Try从未被击中..

我注意到,这只会发生,如果entireRequest是一个https连接。如果未加密,则不会发生此问题。

添加以下以忽略自签名的证书不执行任何操作:

Public Class clsSSL 
    Public Shared Function AcceptAllCertifications(ByVal sender As Object, ByVal certification As System.Security.Cryptography.X509Certificates.X509Certificate, ByVal chain As System.Security.Cryptography.X509Certificates.X509Chain, ByVal sslPolicyErrors As System.Net.Security.SslPolicyErrors) As Boolean 
     Return True 
    End Function 
End Class 

提前感谢!我做了很多搜索,你是我最后的希望!

+0

为什么你使用多线程而不是'WebClient.DownloadStringAsync'? –

+0

我有其他代码需要在单独的线程中与上面的代码一起运行。谢谢! –

回答

0

问题解决了由于这个线程:我只需要添加以下Requesting html over https with c# Webclient

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 

我仍然困惑,为什么我没有被带有任何例外。任何答案?

+1

我只能猜测推理,如果从逻辑上思考,它实际上只是停留在那里。类似于无限循环,但使用单行而不是多行。它可能会一直试图处理该线路,并因此而失败并崩溃。 –

+1

你可能是对的。 DownloadString是一种阻塞方法,所以它可能只是无限期地挂起。令人惊讶的是没有内置超时或故障安全。 –