VB.NETで記述されたアプリケーションがあります(asp.netではなく、Windowsコンソールアプリです)。URL(htmlページ)を呼び出して、応答を文字列に戻そうとしています。応答はストレートJSONであり、htmlタグは一切ありません。で開き、{
で閉じます}
。
HttpWebRequestオブジェクトを正常に作成します。次に、を呼び出しますreq.GetResponse()
。これを行うとすぐに、私はThe underlying connection was closed: The connection was closed unexpectedly.
グーグルしてスタックオーバーフローをチェックしているというエラーを受け取り、適用されることがわかったすべてを試しました(多くは適用されないWCFサービス構成に関係しています)。
これが私のコードです:
Public Function GetJSON(ByRef d As db.Device) As Boolean
Try
d.Url = "http://" & d.IpAddress & ini.doc.<svc>.<url>.Value
Dim req As HttpWebRequest = HttpWebRequest.Create(d.Url)
// req.Accept = "*/*"
// req.Timeout = 30000
// req.ReadWriteTimeout = 30000
// req.KeepAlive = False
// req.UseDefaultCredentials = True
// req.CachePolicy = HttpWebRequest.DefaultCachePolicy
// req.Proxy = HttpWebRequest.DefaultWebProxy
// req.ProtocolVersion = New System.Version(1, 0)
Dim rsp As HttpWebResponse = req.GetResponse()
Return True
Catch ex As Exception
Log(ex.Message)
Return False
Finally
rsp = Nothing
req = Nothing
End Try
End Function
コメントアウトされた行(コメントスタイルは間違っていますが、SOは正しく解析します)は、オンラインで見つけたものに基づいてこれまでに試したすべてのものです。それらのどれもそれを修正しませんでした。作成中のURLが正しいことを確認しました。ブラウザでまったく同じURLを呼び出すと、期待どおりの正しい応答が返されます。
私はそれをワイヤーシャークしてみました...そして実際に期待される完全なデータがシャークの出力に戻ってきて、それから数行、そして次のような赤い線が表示されます:
http > 51943 [RST] Seq=1607 Win=0 Len=0
これは.NETの前に表示される最後の行ですエラーをスローしています。
System.Net
また、SOの投稿ごとにトレース/ログをオンにしてみました。そこからの出力ファイルでは、同様に期待されるすべてのJSONデータが返されますが、戻った後、.NETトレースログに次の行がスローされます。
System.Net.Sockets Verbose: 0 : [7040] Exiting Socket#60467532::Receive() -> 1605#1605
System.Net.Sockets Verbose: 0 : [7040] Socket#60467532::Receive()
System.Net.Sockets Verbose: 0 : [7040] Data from Socket#60467532::Receive
System.Net.Sockets Verbose: 0 : [7040] 00000000 : :
System.Net.Sockets Verbose: 0 : [7040] Exiting Socket#60467532::Receive() -> 0#0
System.Net.Sockets Verbose: 0 : [7040] Socket#60467532::Dispose()
System.Net Error: 0 : [7040] Exception in the HttpWebRequest#27806816:: - The underlying connection was closed: The connection was closed unexpectedly.
System.Net Error: 0 : [7040] Exception in the HttpWebRequest#27806816::GetResponse - The underlying connection was closed: The connection was closed unexpectedly.
これを理解するために次にどこに行くべきかについてのアイデアはありますか?私たちはいくつかの環境監視センサーデバイスからこのデータを読み取っています、そして彼らは私たちに使用するためにこのURLを与えました。
これについて本当に私を混乱させて混乱させる2つのことは、 a)
ブラウザで呼び出されたときに完全に正常に動作する
b)WireSharkと.NETトレースの両方で、すべてのデータが実際に戻ってきていることを示し、フレームワークは何らかの理由でAFTERを除くすべてのデータを受信します!
WebException自体はほとんど使用されていません。InnerExceptionがnullであり、ステータスが「ConnectionClosed{8}」とだけ表示されているためです。
前もって感謝します!!!
UPDATE 08/18 1130:私も今ではなくを使用してみSystem.Net.WebRequest
ましたHttpWebRequest
。これも違いはありませんでした。
UPDATE 08/18 1222:オブジェクト[Http]Web[Request|Response]
を調光してそのメソッドを使用する代わりに、コードを切り替えてみました。ただし、これもまったく同じエラーをスローします。WebClient
DownloadString()
UPDATE 08/18 1230: -を使用してみMy.Computer.Network.DownloadFile()
ましたが、同じ接続が閉じられたというエラーも発生します。