0

我需要接受各种配置文件作为 Web 服务的输入。

[DataContract]
public class ProfileRequest
{
    [DataMember]
    public virtual string address { get; set; }

    [DataMember]
    public virtual string type { get; set; }

    [DataMember]
    public virtual string speed { get; set; }
}

我正在考虑使用这样的配置文件的 IList:

[OperationContract]
IList<ProfileRequest> profiles

我突然想到...也许 IList 并不存在于所有语言中,因此公开这样的数据合同会被认为是不好的做法吗?我应该只坚持简单的类型,以便非 WCF 服务更容易使用该服务吗?

4

1 回答 1

1

这可以。例如以下 c# 合同:

[DataMember]
    public List<CompositeType> StringValue
    {
        get { return stringValue; }
        set { stringValue = value; }
    }

将在 wsdl 中显示为这样的 xml 架构:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://schemas.datacontract.org/2004/07/" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/">
<xs:complexType name="CompositeType">
<xs:sequence>
<xs:element minOccurs="0" name="BoolValue" type="xs:boolean"/>
<xs:element minOccurs="0" name="StringValue" nillable="true" type="tns:ArrayOfCompositeType"/>
</xs:sequence>
</xs:complexType>
<xs:element name="CompositeType" nillable="true" type="tns:CompositeType"/>
<xs:complexType name="ArrayOfCompositeType">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="CompositeType" nillable="true" type="tns:CompositeType"/>
</xs:sequence>
</xs:complexType>
<xs:element name="ArrayOfCompositeType" nillable="true" type="tns:ArrayOfCompositeType"/>
</xs:schema>

所以这只是消费者的数组。当然,如果您的目标是与特定客户端堆栈的互操作性,您应该主动验证互操作性。

于 2012-05-07T15:32:39.750 回答