.NET WCF Soap 1.1 解析命名空间

问题描述

注意:我知道至少有一些其他 StackOverflow 帖子(如 herehere)提出了类似的问题,但没有人得到回答,所以我想我会再试一试:)

我正在尝试基于他们提供给我的客户端 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 (将#修改为@)