この問題の解決策をインターネットとスタック オーバーフローで検索し、さまざまな解決策を試しましたが、どれもうまくいきませんでした。
基本的に、ボタンをクリックすると、VB.NETで書かれたWindowsアプリケーションがあり、次のことを行います。
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim data As Byte() = Encoding.UTF8.GetBytes("Some data message")
Dim myHttpWebRequest As HttpWebRequest = HttpWebRequest.Create("https://SomeDomain.com/sandbox/update")
'If required by the server, set the credentials.
'myHttpWebRequest.Credentials = CredentialCache.DefaultCredentials
Dim cert As X509Certificate = X509Certificate.CreateFromCertFile("C:\Program Files (x86)\Certificates\somecertificate.cer")
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
myHttpWebRequest.ClientCertificates.Add(cert)
myHttpWebRequest.ContentType = "application/json;profile=https://SomeDomain.com/update.json"
myHttpWebRequest.Method = "POST"
'WK 26/01/2017 - "2834"
myHttpWebRequest.ContentLength = data.Length
Dim oRequestStream = myHttpWebRequest.GetRequestStream()
oRequestStream.Write(data, 0, data.Length)
' Get the response.
Dim oWebResponse As WebResponse = myHttpWebRequest.GetResponse()
' Display the status.
MsgBox(CType(oWebResponse, HttpWebResponse).StatusDescription)
' Get the stream containing content returned by the server.
Dim oResponseStream As Stream = oWebResponse.GetResponseStream()
' Open the stream using a StreamReader for easy access.
Dim oStreamReader As New StreamReader(oResponseStream)
' Read the content.
Dim oResult As String = oStreamReader.ReadToEnd()
' Display the content.
MsgBox(oResult)
' Clean up the streams and the response.
oStreamReader.Close()
oResponseStream.Close()
End Sub
ただし、次の行で「[Begin]GetResponse を呼び出す前に、ContentLength バイトを要求ストリームに書き込む必要があります」例外をスローし続けます。
Dim oWebResponse As WebResponse = myHttpWebRequest.GetResponse()
奇妙なことに、このコードは同じネットワーク上の別のマシンで動作します! 唯一の違いは、マシンが 32 ビットで、私のマシンが 64 ビットであることです。それが関連しているかどうかはわかりません。
私はVB.NETは初めてではありませんが、HTTPWebRequestを使用したことはありません. マシンにローカル証明書を保存する必要があります。
URL ドメインを「www.google.com」のようなものに変更すると問題なく動作しますが、明らかにそれは投稿先の URL ではありません。
あるマシンではどのように機能するのか、別のマシンではどのように機能するのかわかりません。
「Using」キーワードを使用して、他のユーザーが同様の投稿で提案したことを試しました。
Using oRequestStream = myHttpWebRequest.GetRequestStream()
oRequestStream.Write(data, 0, data.Length)
End Using
しかし、「リモート サーバーがエラーを返しました: (400) 不正な要求」というメッセージが表示されます。GetResponse 行の例外。
また、構成ファイルに次を追加しようとしました。
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="104857600" />
</requestFiltering>
</security>
</system.webServer>
しかし違いはありませんでした。
誰か親切に私を助けて、これについてアドバイスをください。マシンのエンコーディングの違いと関係があるのでしょうか?
ありがとうございました。