1

この問題の解決策をインターネットとスタック オーバーフローで検索し、さまざまな解決策を試しましたが、どれもうまくいきませんでした。

基本的に、ボタンをクリックすると、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>

しかし違いはありませんでした。

誰か親切に私を助けて、これについてアドバイスをください。マシンのエンコーディングの違いと関係があるのでしょうか?

ありがとうございました。

4

0 に答える 0