WSDL应该如何构建?

时间:2015-04-09 07:31:44

标签: c# asp.net wcf soap wsdl

由于我是WSDL,WCF和SOAP的新手,我不知道如何构建WSDL。

我现在的问题是,当用户使用他们的用户名//密码登录时,服务器应该使用用户拥有的数据进行响应。让我们说想要发回的数据是:

  • MatterID
  • MatterTitle
  • MatterText
  • MatterDate

问题是每个用户可以拥有超过1个问题而我的问题是我不知道如何解析比服务器作为响应发送的第一个 Matter 更多。我的WSDL结构如下:

在:

  • 用户名
  • 密码

OUT:

  • int MatterID
  • str MatterTitle
  • str MatterText
  • int MatterDate

我做错了吗?我应该回复一个包含所有数据的列表吗?或者有没有办法循环回复?

1 个答案:

答案 0 :(得分:2)

如果要返回一个数据数组,最好在WSDL(类型部分)中定义一个列表,如下所示:

 <wsdl:types>
    <s:schema xmlns:s="http://www.w3.org/2001/XMLSchema" targetNamespace="http://localhost/SampleService" elementFormDefault="unqualified" attributeFormDefault="unqualified">

        <s:complexType name="MatterItemType"> <!-- List Item -->
            <s:sequence>
                <s:element name="MatterID" type="s:integer" minOccurs="1" maxOccurs="1"/>
                <s:element name="MatterTitle" type="s:string" minOccurs="1" maxOccurs="1"/> 
                <s:element name="MatterText" type="s:string" minOccurs="1" maxOccurs="1"/>
                <s:element name="MatterDate" type="s:integer" minOccurs="1" maxOccurs="1"/>                      
            </s:sequence>
        </s:complexType>

        <s:complexType name="MatterListType"> <!-- List -->
            <s:sequence>
                <s:element name="MatterItem" type="tns:MatterItemType" minOccurs="0" maxOccurs="unbounded"/>
            </s:sequence>
        </s:complexType>

        <!-- Request and Response -->

        <s:element name="SampleRequest">
                <s:complexType>
                <s:sequence>           
                    <s:element name="username" type="s:string" minOccurs="1" maxOccurs="1"/>
                    <s:element name="password" type="s:string" minOccurs="1" maxOccurs="1"/>                                
                </s:sequence>
            </s:complexType>
        </s:element>

        <s:element name="SampleResponse">
            <s:complexType>
                <s:sequence>                    
                    <s:element name="MatterList" type="tns:MatterListType" minOccurs="1" maxOccurs="1"/>            
                </s:sequence>
            </s:complexType>
        </s:element>    

    </s:schema>
</wsdl:types>   

响应始终包含 MatterList 元素,该元素为 MatterListType MatterListType 包含 MatterItemType 中定义的0到N MatterItem 项目。

响应的结构将是这样的(不包括SOAP信封,名称空间等,仅用于说明结构):

<SampleResponse>
    <MatterList>
        <MatterItem>
            <MatterID>1</MatterID>
            <MatterTitle>Title1</MatterTitle>
            <MatterText>Text1</MatterText>
            <MatterDate>1</MatterDate>
        </MatterItem>
        <MatterItem>
            <MatterID>2</MatterID>
            <MatterTitle>Title2</MatterTitle>
            <MatterText>Text2</MatterText>
            <MatterDate>2</MatterDate>
        </MatterItem>
    </MatterList>
</SampleResponse>

如果您在评论中需要更多帮助,请与我们联系。