在WCF数据合同需求中需要maxOccurs ="unbounded"

Chr*_*our 2 .net xml wcf xsd wsdl

我正在尝试在另一个环境中模拟现有的Web服务以进行测试,并遇到了障碍.

我正在尝试在WCF中创建这个Mock服务

我正在嘲笑的服务(在WCF中没有开发)有一个具有这种类型定义的实体:

<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="dog" nillable="true" type="xs:string"/>

</xs:sequence>
Run Code Online (Sandbox Code Playgroud)

注意maxOccurs ="unbounded"消息本身看起来像这样:

<dog>1</dog>
<dog>2</dog>
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何定义我的DataContract来处理这个问题.我假设只使用如下数组类型:

    [DataContract]
    public class P56040Input
    {
        [DataMember]
        public string[] dog { get; set; }


    }
Run Code Online (Sandbox Code Playgroud)

会对应,但它会对新类型(arrayofstring)做出意想不到的事情:

<xs:sequence>
<xs:element xmlns:q1="http://schemas.microsoft.com/2003/10/Serialization/Arrays" minOccurs="0" name="dog" nillable="true" type="q1:ArrayOfstring"/>
</xs:sequence>
Run Code Online (Sandbox Code Playgroud)

这甚至可以在WCF中进行模拟吗?

Yar*_*veh 5

如果你转到ArrayOfString定义,你会看到它有maxOccurs ="unbounded".所以你在这里看到的只是生成的包装类型wcf.为了不生成这种类型,您需要使用xml序列化程序而不是数据合同.定义将如下所示:

[System.Xml.Serialization.XmlElementAttribute("dog")]
public string[] dog  {get; set;}
Run Code Online (Sandbox Code Playgroud)

我怎么知道的?您需要做的就是"添加Web引用"到wsdl(以便生成客户端代理).然后查看相关的代理部分以查看类型顶部的属性.您可以使用"添加服务引用"执行相同操作,默认情况下使用数据协定,并查看它生成了您使用的内容,这与您需要的内容不完全相同.