【发布时间】:2017-09-20 18:27:50
【问题描述】:
我正在尝试通过 SOAP 请求提交数据。 Web 服务中接收到的数据为空,大概是因为我发送的 XML 中的空白 xmlns 命名空间导致数据返回空(例如,TransmissionVersion)。大多数在线资源都建议删除 xmlns = "",但是有没有一种快速的方法可以让服务接受命名空间,而无需在发送请求之前对其进行检查并删除它,就像这里所做的那样?
https://cmatskas.com/changing-soap-message-data-and-namespaces-with-c/
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:efil="http://samplelink.org" xmlns="http://samplelink.org">
<soapenv:Header/>
<soapenv:Body>
<Send xmlns="http://samplelink.org">
<Transmission>
<SimplifiedReturnTransmission transmissionVersion="2015V01" xmlns="">
<TransmissionHeader>
<TransmissionId>TI000024691218803</TransmissionId>
<Timestamp>2014-09-07T10:18:26</Timestamp>
<Transmitter>
<ETIN>67666665</ETIN>
</Transmitter>
<ProcessType>T</ProcessType>
<DocumentCount>1</DocumentCount>
<TransmissionPaymentHash>14022.49</TransmissionPaymentHash>
</TransmissionHeader>
</SimplifiedReturnTransmission>
</Transmission>
</Send>
</soapenv:Body>
</soapenv:Envelope>
这是界面中的相关代码:
<DataContract()>
<System.Xml.Serialization.XmlRootAttribute("SimplifiedReturnTransmission")>
Public Class SimplifiedReturnTransmissionType
Private transmissionHeaderField As TransmissionHeaderType
Private simplifiedReturnDocumentField() As SimplifiedReturnDocumentType
Private transmissionVersionField As String
<DataMember(EmitDefaultValue:=False)>
<System.Xml.Serialization.XmlElementAttribute("TransmissionHeader")>
Public Property TransmissionHeader() As TransmissionHeaderType
Get
Return Me.transmissionHeaderField
End Get
Set(ByVal value As TransmissionHeaderType)
Me.transmissionHeaderField = value
End Set
End Property
<DataMember(EmitDefaultValue:=False)> <System.Xml.Serialization.XmlAttributeAttribute()>
Public Property transmissionVersion() As String
Get
Return Me.transmissionVersionField
End Get
Set(ByVal value As String)
Me.transmissionVersionField = value
End Set
End Property
End Class
【问题讨论】:
-
尝试使用
svcutil.exe为您生成代理,然后您可以使用生成的类,或者至少能够看到您需要在自己的代码中使用的属性值。跨度> -
svcutil.exe 不起作用,但我尝试使用 xsd.exe 但它不起作用。我看到的属性值的唯一区别是,这个 Form:=System.Xml.Schema.XmlSchemaForm.Qualified 在声明了一些属性后出现了,但即使将它们放入也没有改变。
-
另外,自动生成的 vb 文件的 XmlRootAttributes 中有 [Namespace]:="", IsNullable:=false 的实例,但在尝试在服务中运行时会抛出错误。
-
svcutil 的错误是什么?如果源 wsdl 包含 .xsd 文件,您需要将它们与 wsdl 一起使用。
-
我们这样做了,但我们发现服务不会接受根属性上的空白命名空间,无论是否合格。我们必须将父元素设为根。
标签: wcf soap xml-namespaces datacontract datamember