Tôi đang tạo một ứng dụng để gửi một số XML tới dịch vụ web. Vấn đề là tôi không thể giao tiếp với dịch vụ web. Tôi nhận được lỗi này, khi tôi gọi là "request.GetRequestStream()":Không thể gửi xml đến webservice - Kết nối cơ bản đã bị đóng. Đã xảy ra lỗi không mong muốn khi gửi
The underlying connection was closed. An unexpected error occurred on a send.
ex.Status = SendFailure {4}
Đây là mã mà tôi đang sử dụng:
Imports System.CodeDom.Compiler
Imports System.CodeDom
Imports System.Collections
Imports System.ComponentModel
Imports System.Data
Imports System.Globalization
Imports System.IO
Imports System.Reflection
Imports System.Web.Services.Protocols
Imports System.Net.WebRequest
Imports System.Net
Imports System.Xml.Serialization
Imports System.Xml
Imports System.Uri
Imports System.Text
Imports System.Security.Policy
Imports System.Security
Imports System.Security.Cryptography
Imports System.Security.Cryptography.X509Certificates
Imports System.Security.Cryptography.SHA1CryptoServiceProvider
Imports System.Web.UI.Page
Imports System.Web.Services
Imports System.Windows.Forms.Application
Imports System.Data.OleDb
Imports Microsoft.VisualBasic.Logging
Private Function Send(oRequest As String) As String
Dim CaminhoCertificado As String = StartupPath + "\certificados\TesteWebServices.pfx"
Dim SenhaCertificado As String = "*********"
Dim EnderecoWebService As String = "https://servicos.portaldasfinancas.gov.pt:709/ws/arrendamento"""
Dim SoapAction As String = "https://servicos.portaldasfinancas.gov.pt/arrendamento/definitions/Arrendamento/registarDadosContratoRequest"
Try
Dim request As HttpWebRequest = DirectCast(HttpWebRequest.Create(EnderecoWebService), HttpWebRequest)
Dim cert As New X509Certificate2()
cert.Import(CaminhoCertificado, SenhaCertificado, X509KeyStorageFlags.DefaultKeySet)
request.ClientCertificates.Add(cert)
''''''''''''''''''''''''''''''''''''''''
'System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Ssl3
request.ProtocolVersion = HttpVersion.Version10
request.AllowAutoRedirect = True
request.UserAgent = "Mozilla/3.0 (compatible; My Browser/1.0)"
'request.Proxy = System.Net.WebProxy.GetDefaultProxy()
'request.UseDefaultCredentials = True
'request.Credentials = CredentialCache.DefaultCredentials
''''''''''''''''''''''''''''''''''''''''
request.Method = "POST"
request.ContentType = "text/xml; charset=utf-8"
request.Accept = "text/xml"
request.KeepAlive = False
request.Headers.Add("SOAPAction", SoapAction)
Dim postData As String = oRequest
Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)
request.ContentLength = byteArray.Length
''''''''''''''''
Dim dataStream As Stream = request.GetRequestStream() ''''error is triggered in this line
''''''''''''''''
dataStream.Write(byteArray, 0, byteArray.Length)
dataStream.Close()
Dim response As HttpWebResponse = DirectCast(request.GetResponse(), HttpWebResponse)
dataStream = response.GetResponseStream()
Dim reader As New StreamReader(dataStream, Encoding.GetEncoding("windows-1252"))
Dim responseFromServer As String = reader.ReadToEnd()
reader.Close()
dataStream.Close()
response.Close()
Return responseFromServer
Catch ex As WebException
My.Application.Log.WriteEntry("Error: " & ex.Message & " - " & ex.Status)
If ex.Status = WebExceptionStatus.ProtocolError Then
Dim resp As WebResponse = ex.Response
Dim sr As New StreamReader(resp.GetResponseStream())
Return sr.ReadToEnd()
Else
Return ex.Message & " - " & ex.Status
End If
End Try
End Function
Khung mục tiêu là .Net Framework 4.5 . Tôi có thể gửi xml đến webservice này bằng cách nào?
Có gì trong InnerException? Nó là tốt hơn để đăng nhập ex.ToString, để có được tất cả mọi thứ, như các tài sản ex.Message là khá hạn chế. –
http://stackoverflow.com/a/28439582/2319909 –
Ok, vì vậy tôi đã cài đặt tệp pfx trong Windows và bây giờ tôi nhận được một "lỗi máy chủ: 500" trỏ đến "Phản hồi mờ dưới dạng HttpWebResponse". Tôi đoán đây là một điều tốt, liên quan đến vấn đề ban đầu của tôi, phải không? – RSilva