如何解决.NET WCF Soap 1.1 解析命名空间
注意:我知道至少有一些其他 StackOverflow 帖子(如 here 和 here)提出了类似的问题,但没有人得到回答,所以我想我会再试一试:)
我正在尝试基于他们提供给我的客户端 Soap 1.1 wsdl 和 .xsd 架构创建 .NET WCF 服务。他们还提供了一个示例输入(详细信息在我的示例中已更改,但主要问题仍然存在)。
我对 wsdl 和 xsd 文件使用了 svcutil 来构建 MessageContracts,它们大部分都可以工作,但前提是我用给定的命名空间限定了每个元素。
在我收到的示例请求中,命名空间仅在请求的根元素中限定。
我尝试使用生成的 [XmlElement] 属性,在 Qualified、Unqualifed 和 None 之间更改 Form,并将 Namespace 更改为“”,以及我能想到的所有其他事情,但我无法管理让 XML 解析器成功解析完整请求,除非我使用 Form=Qualified 并且实际上在每个子元素中都包含命名空间前缀。
问题:是否还有其他属性,或我已有的属性上的其他属性,允许我的客户提供准确的输入?
这里是服务契约声明和消息契约:
[ServiceContract(Name="MyService",Namespace = "http://www.mywebsite.com/webservices/beans")]
[XmlSerializerFormat(Style = OperationFormatStyle.Document,Use = OperationFormatUse.Literal,SupportFaults = true)]
public interface IValidatePasswordService
{
[OperationContract(Action="http://api.paysimple.com/sso/myRequest",Name="myRequest")]
[XmlSerializerFormat(Style = OperationFormatStyle.Document,SupportFaults = true)]
MyResponseMessage MyRequest(MyRequestMessage request);
}
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel","4.0.0.0")]
[System.ServiceModel.MessageContractAttribute(IsWrapped=false)]
public partial class MyRequestMessage
{
[System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.mywebsite.com/webservices/beans",Order=0)]
[System.Xml.Serialization.XmlArrayItemAttribute("data",Form=System.Xml.Schema.XmlSchemaForm.Qualified,IsNullable=false)]
public Data[] MyRequest;
public MyRequestMessage()
{
}
}
[System.CodeDom.Compiler.GeneratedCodeAttribute("svcutil","4.8.3928.0")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.mywebsite.com/webservices/beans")]
public partial class Data
{
private string valueField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified,Order=0)]
public string value
{
get
{
return this.valueField;
}
set
{
this.valueField = value;
}
}
}
提供的输入示例如下所示:
<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
<Body>
<bean:MyRequest xmlns:bean="http://www.mywebsite.com/webservices/beans">
<data><value>data1</value></data>
<data><value>data2</value></data>
<data><value>data3</value></data>
</bean:MyRequest>
</Body>
但是,当我使用该请求时,我得到一个带有空 MyRequest 数组的 MyRequestMessage。 但是如果我给每个子元素添加“bean:”前缀,就像这样:
<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
<Body>
<bean:MyRequest xmlns:bean="http://www.mywebsite.com/webservices/beans">
<bean:data><bean:value>data1</bean:value></bean:data>
<bean:data><bean:value>data2</bean:value></bean:data>
<bean:data><bean:value>data3</bean:value></bean:data>
</bean:MyRequest>
</Body>
然后我得到所有的输入值。
关于我可以尝试什么的任何想法(除了尝试要求客户改变他们提出请求的方式)?
谢谢!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。