質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
HttpWebRequest

HttpWebRequestとは.NETにおけるクラスであり、WebRequestクラスをHTTPに導入するものです。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

例外

例外(exception)とは、プログラムの処理実行中に発生する、通常の処理の続行を妨げる特殊な事象のことを呼びます。この「例外」が発生した場合に、現在の処理を中断し、変わりに別の処理を実行させる事を「例外処理」と呼びます。

.NET Framework 3.5

.NET Framework-3.5は、NET Framework 2.0にアセンブリを追加(3.0も含む)したものをベースにしています。

Q&A

解決済

1回答

22360閲覧

.NET3.5 HttpWebRequest.GetResponse()の例外について

zonozono

総合スコア16

HttpWebRequest

HttpWebRequestとは.NETにおけるクラスであり、WebRequestクラスをHTTPに導入するものです。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

例外

例外(exception)とは、プログラムの処理実行中に発生する、通常の処理の続行を妨げる特殊な事象のことを呼びます。この「例外」が発生した場合に、現在の処理を中断し、変わりに別の処理を実行させる事を「例外処理」と呼びます。

.NET Framework 3.5

.NET Framework-3.5は、NET Framework 2.0にアセンブリを追加(3.0も含む)したものをベースにしています。

1グッド

3クリップ

投稿2017/07/30 13:54

Windows10Pro x64 + VS2017 + .NET Framework3.5で、以下のコードで例外出ない方、いらっしゃいますでしょうか。
あるいは、解決方法どなたかご存知でしょうか。

HttpWebRequest req = (HttpWebRequest)WebRequest.Create("https://www.tanabe-ind.co.jp/"); req.Timeout = 900000; using (HttpWebResponse res = (HttpWebResponse)req.GetResponse()) //ここで例外 { }
System.Net.WebException: '基礎になる接続が閉じられました: 送信時に、予期しないエラーが発生しました。' 内部例外: IOException: トランスポート ストリームから予期しない EOF または 0 バイトを受信しました。

ちなみに同じコードで.NET Framework4.0なら通ります。
また、上記以外の大抵のサイト(例えば https://www.google.co.jp/)も通ります。
上記サイトはie等ブラウザで普通に見れるところです。

Fiddlerで確認したリクエストヘッダは以下の通り。

ieのリクエストヘッダ

CONNECT www.tanabe-ind.co.jp:443 HTTP/1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko Content-Length: 0 Host: www.tanabe-ind.co.jp Connection: Keep-Alive Pragma: no-cache A SSLv3-compatible ClientHello handshake was found. Fiddler extracted the parameters below. Version: 3.3 (TLS/1.2) ~以下略~

上記コードでのヘッダ(.net3.5・4.0同じ)

CONNECT www.tanabe-ind.co.jp:443 HTTP/1.1 Host: www.tanabe-ind.co.jp Connection: Keep-Alive A SSLv3-compatible ClientHello handshake was found. Fiddler extracted the parameters below. Version: 3.1 (TLS/1.0) ~以下略~

色々調べて、事前に下記コードを入れたりもしましたが駄目でした。
TLS/1.2でも1.0でも、.net4.0なら通り、3.5なら例外です。

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | (SecurityProtocolType)0x00000C00 | (SecurityProtocolType)0x00000300;

あと、足りないヘッダを補おうと下記コードを入れても、送り先がhttpsだとヘッダに変化無いのはそういうものでしょうか。(.net3.5・4.0両方とも)

req.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"; req.ContentLength = 0; req.KeepAlive = true; req.Headers["TEST"] = "TEST";

.NET4系に移行してしまえば済む話なのですが、とりあえず解決はしておきたく、ここに書きました。どなたか情報ご存知でしたらお願いします。

Tak1wa👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

おそらくこれです。
https://stackoverflow.com/questions/16348393/an-unexpected-error-occurred-on-a-send-eof-or-0-bytes-from-the-transport-stream

SecurityProtocolType 列挙体の値としてSSL 3.0、TLS 1.0、TLS 1.1、TLS1.2、そしてデフォルトが選べますが、
https://msdn.microsoft.com/ja-jp/library/system.net.securityprotocoltype(v=vs.110).aspx

3.5のときにはSSL 3.0、TLS 1.0のみが選択できました。
https://msdn.microsoft.com/ja-jp/library/system.net.securityprotocoltype(v=vs.90).aspx

投稿2017/07/31 03:13

x_x

総合スコア13749

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

zonozono

2017/07/31 06:18

ご返信ありがとうございます。 ただ、下記の通り現在は3.5でもTLS1.1、1.2を使えるようでして、既にそれを元に4つのSecurityProtocolType値を個別に指定して試し、結果全滅しておりました。 .NET Framework で TLS1.1 および 1.2 を有効化する方法 https://blogs.technet.microsoft.com/jpieblog/2015/04/07/net-framework-tls1-1-1-2/ ですが、4つの値の症状にはちょっと違いがありまして、Ssl3なら即時例外、その他のTls・(SecurityProtocolType)0x00000C00・(SecurityProtocolType)0x00000300なら1分以上経ってから例外でした。 何かパッチでも当ててないからエラーが出てるのかと思ったのですが、https://www.google.co.jp/に接続してみると、Ssl3なら即時例外、その他なら普通にページ受信成功していました。 結局、SSLは置いとくとしても、.NET3.5でのTLS通信は極一部(数%位?)のサーバと失敗する相性問題のようなものがあると予想しております。
x_x

2017/07/31 06:32

そこにWin8用のパッチは出ているようですが、10用のはないですね。使えるといっていないものは使えないのではないでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問