2012-05-31 34 views
5

Tôi cần sử dụng dịch vụ web đã được cung cấp cho tôi và sử dụng SOAP kèm theo tệp đính kèm làm phương tiện liên lạc. Nó cũng sử dụng WS-Security 1.0 như là một hình thức xác thực (người dùng và truyền trong văn bản thuần túy).SOAP với phần đính kèm trong VB.NET

Tôi sẽ làm việc trên VB.NET và kinh nghiệm của tôi với dịch vụ web rất mỏng và đi xa khi tạo dịch vụ web WCF, thêm tham chiếu dịch vụ vào dự án khác, tạo lớp proxy và sử dụng phương thức.

Tôi đã tìm kiếm trên Internet và thấy rằng không có hỗ trợ gốc cho SwA trong VB.NET, điều này có đúng không? Một ví dụ về cách tôi có thể tiếp cận giao tiếp và một số chỉ dẫn về nơi tôi có thể nhận thức rõ hơn về các khái niệm này sẽ là tuyệt vời.

Trả lời

1

Trong một dự án gần đây của tôi, tôi đã phải giao tiếp trong C# với xà phòng WebService. Để đối phó với điều đó tôi đã làm xà phòng đầy đủ của tôi trong một chuỗi và gửi nó đến dịch vụ web với một HttpWebRequest. Với WebRespons, bạn có thể đọc phản hồi của webservice và đưa nó trở lại thành chuỗi. Chuỗi này bạn có thể chuyển đổi thành XmlDocument để đọc ra đối tượng mà bạn muốn.

Bạn có thể dễ dàng thực hiện các soapenvelope như bạn muốn với một vòng lặp (nếu cần) và cũng đặt authencation trong tiêu đề của soapenvelope (đã làm nó theo cách này)

Để có được cú pháp soapenvelope đúng web của bạn dịch vụ tôi có thể khuyên bạn sử dụng SOAPUI, một ứng dụng nhỏ tuyệt vời đã giúp tôi rất nhiều! Bằng cách này, bạn sẽ thấy vị trí đặt authencation, ..

+0

Vấn đề của tôi là với tệp đính kèm. Bạn làm việc với điều đó quá trong dự án của bạn? – seth

+0

Bạn có ý nghĩa gì với tệp đính kèm, bạn có thể đưa ra ví dụ về điều này không? – Kevinc

+0

Tôi có tệp xml và tôi cần gửi cùng với yêu cầu xà phòng. Từ những gì tôi đã đọc, có vẻ như không có hỗ trợ trong NET cho điều này nhưng tôi không thực sự biết điều này có nghĩa là gì. – seth

1

Tại sao không chỉ đưa dữ liệu tệp đính kèm của bạn vào mảng byte và gửi?

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 tập tin của bạn vào mảng byte với một cái gì đó dọc theo những dòng (mở một dòng suối cho tập tin đính kèm, vượt qua nó vào chức năng này):

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 

chỉnh sửa:

Chỉ cần biết rằng chức năng StreamToByteArray của tôi có thể được thay thế bằng cách đơn giản:

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

Như fa r như tôi có thể nói từ đây: http://www.w3.org/TR/SOAP-attachments các tập tin đính kèm cần phải đi nội tuyến trong cơ thể của thông điệp có nghĩa là bạn cần phải kết hợp các câu trả lời từ Kevin và Tom để xây dựng thông điệp của bạn.

Tôi đã lưu ý rằng SOAP có tệp đính kèm dường như chỉ là một nội dung gửi chứ không phải là tiêu chuẩn, hơn thế nữa nó còn khá cũ.

Giả sử bạn phải sử dụng dịch vụ web 'nguyên trạng' Tôi sẽ thử và nhận thêm một số dữ liệu hoặc ví dụ từ người tạo/nhà cung cấp dịch vụ nếu bạn có thể.

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