2016-06-02 29 views
2

私はURLを呼び出し、そのサービスによって書き込まれたステータスをキャプチャする非常に簡単なサービスを持っています。 myServiceURLラインの基底の接続が閉じられました:予期しないエラーが発生しました

// Service call used to determine availability 
System.Net.WebClient client = new System.Net.WebClient(); 

// I need this one (sorry, cannot disclose the actual URL) 
Console.WriteLine(client.DownloadString(myServiceURL + ";ping")); 

// I added this for test purposes 
Console.WriteLine(client.DownloadString("https://www.google.com")); 

「DownloadStringは、」「基になる接続が閉じられました:予期しないエラーが発生しました」エラーをスローし、google.comのための「DownloadStringは」作品のに対し示すものは、この行のためにフィドラーでありませんし、私はそのためのコンソール出力を参照してください。

エラーの別の提案に続いて、UseDefaultCredentials、エンコーディングオプションの設定、適切なヘッダーのリクエストへの追加を試みましたが、いずれも違いはありません。

client.UseDefaultCredentials = true; 
client.Encoding = Encoding.UTF8; 

ブラウザでmyServiceURLに移動すると、正常に動作し、「OK」と表示されます。次のように

同じサービスからもう一つの方法は、符号化されている:

// Request 
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(myServiceURL + ";login"); 

// Set the request configuration options 
req.Method = "POST"; 
req.ContentType = "text/xml"; 
req.ContentLength = bytes.Length; 
req.Timeout = -1; 

// Call for the request stream 
using (Stream os = req.GetRequestStream()) 
{ 
    os.Write(bytes, 0, bytes.Length); 
} 

// ....snip 

// This line fails with the same error as before 
WebResponse resp = req.GetResponse() 

この

は、すべての.NET Framework 4.0を使用して、Windows 7(64ビット)PC上で実行されています。 myServiceURLのサービスは、私が制御できない第三者サービスです。

+0

あなたはreq.Proxy = WebProxy.GetDefaultProxy()を試してみましたか? –

+0

GetDefaultProxy(廃止されましたか?)を使用しようとしましたが、違いはありませんでした。 – Sean

+0

ああ申し訳ありませんが、コンテンツタイプではなく、このreqをHttpWebRequest.Accept = "text/xml"として使用できます。 –

答えて

0
 //assuming this is set 
     byte[] Data; 
     string url = string.Format("{0};{1}" ,myServiceURL, "login"); 
     // Request 
     HttpWebRequest wreq = (HttpWebRequest)WebRequest.Create(url); 

     wreq.Method = "POST"; 
     wreq.Proxy = WebProxy.GetDefaultProxy(); 

     (wreq as HttpWebRequest).Accept = "text/xml"; 


     if (Data != null && Data.Length > 0) 
     { 
      wreq.ContentType = "application/x-www-form-urlencoded"; 
      System.IO.Stream request = wreq.GetRequestStream(); 
      request.Write(Data, 0, Data.Length); 
      request.Close(); 
     } 
     WebResponse wrsp = wreq.GetResponse(); 
+0

私が使っているコードと比べると、このコードとはかなり異なるものがあります。これを試してみました...同じエラーです。実際にgoogle.comと同じテキストファイル(自分のサーバーにアップロードされたもの)と同じリクエストが両方のコードと同じように働いていると思われます期待される。 調査中 – Sean

+0

私は理解しています。変更はcontentType "" application/x-www-form-urlencodedにあります ""この投稿を見てくださいhttp://stackoverflow.com/questions/4007969/application-x-www-form-urlencoded-or-multipart-フォームデータ –

5

最終的にこの問題の底に到達しましたが、その答えは同じ問題を持つ全員には当てはまりません。私は、Fiddler、WireShark、ファイアウォールを組み合わせて、一部のHTTPSサイトから情報を引き出すことはできますが、すべてのイベントやトレースイベントを取得することができなかったことを示唆しています。

Google Chromeでサイトを開き、そのサイトのURLアドレスの「https」の南京錠をクリックすると、「セキュリティの概要」を表示するために、ほとんどのサイトで ' TLS v1.2を使用していたことを確認しました。

TLS v1.2は次のように表示されています。 Visual Studio 2012(またはそれ以上)が必要な.NET Framework 4.5以上でのみサポートされます

現在、Visual Studio 2010で.NET Framework 4.0を実行しています

ダウンロードしたVisual Studio 2015 Community Editionを使用して、.NET Framework 4.5.2を使用してプロジェクト内の「同じ」コードをテストし、すぐに機能しました。

関連する問題