代码之家  ›  专栏  ›  技术社区  ›  David Fox

如何用XML为.NET web服务创建请求?

  •  0
  • David Fox  · 技术社区  · 14 年前

    如何在XML中指定请求对象格式?我的web服务如下所示:

    [WebMethod]
    public string MethodName(string str, string str2)
    {
        if (random())
            return "123";
        else
            return "no";
    }
    

    一切都在弦中。如何向使用者指定在XML中请求什么?我习惯将其指定为HTTP GET:

    http://domain.tld/service.asmx/MethodName?str=textgoeshere&str2=moretext
    

    整个XML请求对象是什么样子的?如果我更改了数据类型或参数名,将来在哪里可以找到这种格式/规范?

    当前WSDL输出:

    <wsdl:definitions targetNamespace="my namespace">
    <wsdl:types>
    <s:schema elementFormDefault="qualified" targetNamespace="my namespace">
    <s:element name="MyMethodName">
    <s:complexType>
    <s:sequence>
    <s:element minOccurs="0" maxOccurs="1" name="str" type="s:string"/>
    <s:element minOccurs="0" maxOccurs="1" name="str2" type="s:string"/>
    </s:sequence>
    </s:complexType>
    </s:element>
    <s:element name="MyMethodNameResponse">
    <s:complexType>
    <s:sequence>
    <s:element minOccurs="0" maxOccurs="1" name="MyMethodNameResult" type="s:string"/>
    </s:sequence>
    </s:complexType>
    </s:element>
    

    以下是准确的XML规范吗?

    <?xml version="1.0">
    <str>1</str>
    <str2>123456789</str2>
    
    2 回复  |  直到 14 年前
        1
  •  0
  •   ryber    14 年前

    使用SOAP.Net,实际上会生成文档来解释XML应该是什么样子。如果您与服务器在同一个框中,甚至会生成一个表单供您测试。

    去吧 http://domain.tld/service.asmx

        2
  •  0
  •   STW    14 年前

    看起来你在通过 SOAP WSDL (Web服务描述语言)基于模式的,描述可用方法、其参数、返回类型和约束。

    WSDL基本上是服务的接口定义,因此如果方法签名发生了更改,则需要相应地更新客户机。在visualstudio中,您可以通过右键单击服务引用并说“Update”来实现这一点,这将重新生成web服务的客户端代理。


    有助于澄清:SOAP是一个基于XML的标准,所以所有SOAP消息 XML,但并非所有XML都是SOAP。要与web服务交谈,您发送的XML需要符合SOAP规范——因此示例消息可能如下所示(这是一个来自Wikipedia的经过调整的示例,并不打算完全正确地用于您的示例):

    <?xml version="1.0"?>
    <soap:Envelope
    xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
    soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
    
    <soap:Body xmlns:m="my namespace/Service">
      <m:MyMethodName>
        <m:str>someValue</m:str>
        <m:str2>otherValue</m:str2>
      </m:MyMethodName>
    </soap:Body>
    
    </soap:Envelope>