2012-05-31 10 views
5

Potrzebuję skorzystać z usługi sieciowej, która została mi dostarczona i która używa SOAP z załącznikami jako środkiem komunikacji. Używa również WS-Security 1.0 jako formy autencation (użytkownik i przekaz w postaci zwykłego tekstu).SOAP z załącznikami w VB.NET

Będę pracował nad VB.NET, a moje doświadczenia z usługami sieciowymi są bardzo wąskie i sięgają tak daleko, jak tworzenie usługi WWW WCF, dodawanie referencji do usługi w innym projekcie, tworząc w ten sposób klasę proxy i używając tych metod.

Przeszukałem Internet i odkryłem, że nie ma natywnego wsparcia dla SwA w VB.NET, czy to prawda? Przykład, w jaki sposób mogę podejść do komunikacji i wskazać, gdzie mogę być bardziej świadomy tych pojęć, byłby wspaniały.

Odpowiedz

1

W ostatnim projekcie miałem do komunikowania się w C# z mydłem WebService. Aby sobie z tym poradzić, zrobiłem moją pełną wersję soapout w ciągu znaków i wysłałem ją do usługi sieciowej za pomocą HttpWebRequest. Za pomocą WebRespons możesz odczytać odpowiedź usługi internetowej i umieścić ją z powrotem w łańcuchu. Ten ciąg można przekonwertować na XmlDocument, aby odczytać obiekt, który chcesz.

można łatwo dokonać soapenvelope jak chcesz z pętli (jeśli to konieczne), a także umieścić authencation w nagłówku soapenvelope (zrobił to w ten sposób)

Aby uzyskać prawidłowe soapenvelope składnię internecie usługa Mogę doradzić ci użycie SOAPUI, świetnej małej aplikacji, która bardzo mi pomogła! W ten sposób zauważysz, gdzie umieścić autencation, ..

+0

Mój problem dotyczy załączników. Pracujesz nad tym również w swoim projekcie? – seth

+0

Co masz dokładnie na myśli z załącznikami, czy możesz podać przykład tego? – Kevinc

+0

Mam plik xml i muszę wysłać go razem z prośbą o mydło. Z tego, co przeczytałem, wydaje się, że nie ma wsparcia w .NET, ale tak naprawdę nie wiem, co to oznacza. – seth

1

Dlaczego po prostu umieścić dane załączników w tablicy bajtów i wysłać to?

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 plik do tablicy bajtów z czegoś wzdłuż tych linii (otworzyć strumień na zajęcia, przekazać go do tej funkcji):

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:

Właśnie dowiedziałem się, że moją funkcję StreamToByteArray można zastąpić po prostu:

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

Jako fa r jak mogę stwierdzić stąd: http://www.w3.org/TR/SOAP-attachments załączniki muszą wejść liniowo w treść wiadomości, co oznacza, że ​​musisz połączyć odpowiedzi od Kevina i Toma, aby stworzyć wiadomość.

Zauważyłem, że SOAP z załącznikami wydaje się być tylko zgłoszeniem, a nie standardem, co więcej, jest raczej przestarzały.

Zakładając, że musisz korzystać z usługi internetowej "tak jak jest", spróbuję uzyskać dodatkowe dane lub przykłady od twórcy usług/dostawcy, jeśli możesz.