我需要使用提供给我的Web服务,它使用带附件的SOAP作为通信手段。它还使用WS-Security 1.0作为身份验证的形式(用户并以纯文本传递)。
我将从事VB.NET工作,我对Web服务的经验非常渺茫,甚至可以创建一个WCF Web服务,在另一个项目中添加服务引用,从而创建一个代理类并使用这些方法。 / p>
我搜索了互联网,发现在VB.NET中没有对SwA的原生支持,这是正确的吗? 关于我如何接近通信的一个例子以及我可以更加了解这些概念的一些指示将是极好的。
答案 0 :(得分:1)
在我最近的一个项目中,我不得不使用soap WebService在c#中进行通信。为了解决这个问题,我在字符串中创建了完整的soapenvelope,并使用HttpWebRequest将其发送到Web服务。使用WebRespons,您可以读出Web服务的响应并将其放回字符串中。您可以将此字符串转换为XmlDocument以读出所需的对象。
您可以使用循环(如果需要)轻松制作所需的soapenvelope,并将验证放在soapenvelope的标题中(这样做)
要获得Web服务的正确soapenvelope语法,我建议您使用SOAPUI,这是一个很棒的小应用程序,对我帮助很大!通过这种方式,您将注意到在哪里进行验证,..
答案 1 :(得分:1)
为什么不将附件数据放入字节数组并发送?
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
使用这些行中的某些内容将文件流式传输到字节数组中(打开附件的流,将其传递给此函数):
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
编辑:
刚刚了解到我的StreamToByteArray
功能可以简单地替换为:
Dim filePath as String = "Path\to\file"
Dim fileBytes as Byte() = System.IO.File.ReadAllBytes(filePath)
答案 2 :(得分:0)
据我所知:http://www.w3.org/TR/SOAP-attachments附件需要在邮件正文中内联,这意味着您需要结合Kevin和Tom的答案来构建您的邮件。
我确实注意到带附件的SOAP似乎只是提交而不是标准,而且它过时了。
假设您必须“按原样”使用网络服务,如果可以的话,我会尝试从服务创建者/供应商那里获得一些额外的数据或示例。