我需要使用提供给我的 Web 服务,它使用带有附件的 SOAP 作为通信方式。它还使用 WS-Security 1.0 作为一种身份验证形式(用户并以纯文本形式传递)。
我将在 VB.NET 上工作,我在 Web 服务方面的经验非常少,甚至可以创建 WCF Web 服务,在另一个项目中添加服务引用,从而创建一个代理类并使用这些方法。
我在网上搜索过,发现VB.NET中没有对SwA的原生支持,这是正确的吗?一个关于我如何进行沟通的例子以及我在哪里可以更了解这些概念的一些指示将是极好的。
为什么不将附件数据放入字节数组并发送呢?
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)
在我最近的一个项目中,我不得不在 C# 中与一个肥皂 WebService 进行通信。为了解决这个问题,我在一个字符串中制作了完整的肥皂信封,并使用 HttpWebRequest 将其发送到 Web 服务。使用 WebRespons,您可以读出 Web 服务的响应并将其放回字符串中。您可以将此字符串转换为 XmlDocument 以读出您想要的对象。
您可以使用循环轻松制作肥皂信封(如有必要),并将身份验证放在肥皂信封的标题中(这样做)
为了让您的 Web 服务获得正确的 soapenvelope 语法,我建议您使用 SOAPUI,这是一个非常棒的小型应用程序,对我帮助很大!这样你会注意到在哪里放置身份验证,..
据我从这里可以看出:http: //www.w3.org/TR/SOAP-attachments附件需要嵌入到消息正文中,这意味着您需要将 Kevin 和 Tom 的答案结合起来建立你的信息。
我确实注意到带有附件的 SOAP 似乎只是提交而不是标准,而且它已经过时了。
假设您必须“按原样”使用 Web 服务,如果可以的话,我会尝试从服务创建者/供应商那里获取一些额外的数据或示例。