2015-11-17 16 views
5

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?

+0

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ế. –

+2

http://stackoverflow.com/a/28439582/2319909 –

+0

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

Trả lời

1

Bạn đã nhận xét bài tập ServicePointManager.SecurityProtocol - có thể là do kết nối là HTTPS - Đây có thể là bản sao của this.

+0

Dòng đó được nhận xét bởi vì tôi đã cố gắng sử dụng nó, nhưng đó là một thử không thành công. Thêm vào đó, tất cả các dòng nhận xét đã ở đâu đó trong thời gian không bình luận và tôi vẫn có cùng một vấn đề. Cảm ơn – RSilva

+1

Bạn đã thử TLS (và các SecurityProtocolTypes khác) và cũng là cài đặt hết thời gian chờ được đề cập trong câu hỏi được tham chiếu? –

+0

Có, tôi đã thử tất cả các loại Giao thức bảo mật cũng không thành công. – RSilva

Các vấn đề liên quan