2012-05-31 14 views
5

Ich brauche einen Webdienst, der mir zur Verfügung gestellt wurde und der SOAP mit Anhängen als Kommunikationsmittel verwendet. Es verwendet auch WS-Security 1.0 als eine Form der Authentisierung (Benutzer und übergeben im Klartext).SOAP mit Anlagen in VB.NET

Ich werde an VB.NET arbeiten und meine Erfahrung mit Webdiensten ist sehr schlank und geht so weit wie das Erstellen eines WCF-Webdiensts, das Hinzufügen der Dienstreferenz in einem anderen Projekt, wodurch eine Proxyklasse erstellt und die Methoden verwendet.

Ich habe das Internet gesucht und festgestellt, dass es keine native Unterstützung für SwA in VB.NET gibt, ist das korrekt? Ein Beispiel, wie ich die Kommunikation angehen kann und einige Hinweise darauf, wo ich diese Konzepte besser kennenlernen kann, wären hervorragend.

Antwort

1

In einem meiner letzten Projekte musste ich in C# mit einem soap WebService kommunizieren. Um damit fertig zu werden, habe ich meinen vollständigen Soapenvelope in einer Zeichenfolge erstellt und mit einem HttpWebRequest an den Webservice gesendet. Mit den WebRespons können Sie dann die Antwort des Webservice auslesen und in einen String zurückschreiben. Diese Zeichenfolge, die Sie in ein XmlDocument konvertieren können, um das gewünschte Objekt auszulesen.

Sie können leicht die soapenvelope machen, wie Sie mit einer Schleife (falls erforderlich) wollen und setzen auch die AUTHENCATION in der Kopfzeile des soapenvelope (tat es auf diese Art und Weise)

die richtige soapenvelope Syntax Ihres Web zu erhalten Service Ich kann Ihnen raten, SOAPUI zu verwenden, eine großartige kleine Anwendung, die mir sehr geholfen hat! Auf diese Weise werden Sie feststellen, wo die Authentisierung, ..

+0

Mein Problem ist mit den Anhängen. Daran arbeiten Sie auch in Ihrem Projekt? – seth

+0

Was meinst du genau mit Anhängen, kannst du ein Beispiel dafür geben? – Kevinc

+0

Ich habe eine XML-Datei, und ich muss es zusammen mit der Soap-Anfrage senden. Von dem, was ich gelesen habe, scheint es keine Unterstützung in .NET dafür zu geben, aber ich weiß nicht wirklich was das bedeutet. – seth

1

Warum nicht einfach Ihre Anlage Daten in eine Byte-Array und senden Sie das?

Public Class SoapPackage 
    Public Property AttachmentName() As String 
     Get 
      Return m_AttachmentName 
     End Get 
     Set 
      m_AttachmentName = Value 
     End Set 
    End Property 
    Private m_AttachmentName As String 

    ' put your file data in here 
    Public Property AttachmentData() As Byte() 
     Get 
      Return m_AttachmentData 
     End Get 
     Set 
      m_AttachmentData = Value 
     End Set 
    End Property 
    Private m_AttachmentData As Byte() 
End Class 

Streaming Ihre Datei in den Byte-Array mit etwas in diese Richtung (öffnet einen Strom für die Anlage, übergeben sie in diese Funktion):

Public Shared Function StreamToByteArray(input As Stream) As Byte() 
    Dim buffer As Byte() = New Byte(16 * 1024 - 1) {} 
    Using ms As New MemoryStream() 
     Dim read As Integer 
     While (InlineAssignHelper(read, input.Read(buffer, 0, buffer.Length))) > 0 
      ms.Write(buffer, 0, read) 
     End While 
     Return ms.ToArray() 
    End Using 
End Function 

edit:

gerade gelernt, dass Meine StreamToByteArray Funktion kann einfach ersetzt werden:

Dim filePath as String = "Path\to\file" 
Dim fileBytes as Byte() = System.IO.File.ReadAllBytes(filePath) 
0

Als fa Wie ich hier sehen kann: http://www.w3.org/TR/SOAP-attachments müssen die Anhänge inline innerhalb des Nachrichtentexts sein, was bedeutet, dass Sie die Antworten von Kevin und Tom kombinieren müssen, um Ihre Nachricht zu erstellen.

Ich habe festgestellt, dass SOAP mit Anhängen scheint nur eine Vorlage und kein Standard, außerdem ist es ziemlich veraltet.

Angenommen, Sie müssen den Web-Service "so wie er ist" verwenden, würde ich versuchen, einige zusätzliche Daten oder Beispiele von der Service-Creator/Anbieter zu bekommen, wenn Sie können.