创建Web服务WSDL / SOAP的使用者

时间:2013-06-21 18:57:05

标签: c# wcf web-services soap wsdl

我正在尝试编写一个Windows桌面应用程序(使用WCF),它是Web服务的使用者。

应用程序:

  • 向英国政府服务器发送SOAP消息,以根据传递的控件获取身份验证令牌

  • 以包含身份验证令牌的字符串形式从该服务器检索响应。

我有一个来自英国政府的SOAP消息模板,以及该服务的WSDL文件。

我尝试了什么

  1. 使用WSDL文件添加服务引用。我收到以下错误:不支持URI格式。
  2. 使用服务的URL添加Web引用。我收到以下错误:请求失败,HTTP状态为405:Method Not Allowed。
  3. 使用POST发送SOAP请求。对GetResponse()的调用引发了500外部服务器错误。
  4. 注意:我使用的是VS 2005

    WSDL:

    <?xml version="1.0" encoding="utf-8"?>
    <definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:conv="http://www.openuri.org/2002/04/soap/conversation/" xmlns:cw="http://www.openuri.org/2002/04/wsdl/conversation/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:jms="http://www.openuri.org/2002/04/wsdl/jms/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:s1="https://tpvs.hmrc.gov.uk/dpsauthentication" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" targetNamespace="https://tpvs.hmrc.gov.uk/dpsauthentication">
        <types>
            <s:schema elementFormDefault="qualified" targetNamespace="https://tpvs.hmrc.gov.uk/dpsauthentication" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns="https://tpvs.hmrc.gov.uk/dpsauthentication">
                <s:element name="DPSrequestToken">
                    <s:complexType>
                        <s:sequence>
                            <s:element name="version" type="s:int"/>
                            <s:element name="vendorID" type="s:string" minOccurs="0"/>
                        </s:sequence>
                    </s:complexType>
                </s:element>
                <s:element name="DPSrequestTokenResponse">
                    <s:complexType>
                        <s:sequence>
                            <s:element name="DPSrequestTokenResult" type="s:string" minOccurs="0"/>
                        </s:sequence>
                    </s:complexType>
                </s:element>
            </s:schema>
        </types>
        <message name="DPSrequestTokenSoapIn">
            <part name="parameters" element="s1:DPSrequestToken"/>
        </message>
        <message name="DPSrequestTokenSoapOut">
            <part name="parameters" element="s1:DPSrequestTokenResponse"/> 
        </message>
        <portType name="dpsauthenticationSoap">
            <operation name="DPSrequestToken">
                <input message="s1:DPSrequestTokenSoapIn"/>
                <output message="s1:DPSrequestTokenSoapOut"/>
            </operation>
        </portType>
        <binding name="dpsauthenticationSoap" type="s1:dpsauthenticationSoap"> 
            <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
            <operation name="DPSrequestToken">
                <soap:operation soapAction="https://tpvs.hmrc.gov.uk/dpsauthentication/DPSrequestToken" style="document"/>
                <input>
                    <soap:body use="literal"/>
                </input>
                <output>
                    <soap:body use="literal"/>
                </output>
            </operation>
        </binding>
        <service name="dpsauthentication">
            <port name="dpsauthenticationSoap" binding="s1:dpsauthenticationSoap">
                <soap:address location="https://dps.ws.hmrc.gov.uk/dpsauthentication/service"/>
            </port>
        </service>
    </definitions>
    

    SOAP:

    <!-- v1.1 30/11/2007 -->
    <!-- 24/10/2011 - minor change to remove duplicated text from <Envelope> element. No impact on validation, therefore not re-versioned. -->
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <SOAP-ENV:Header>
            <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
                <wsse:UsernameToken>
                    <wsse:Username>as advised by SDS team</wsse:Username>
                    <wsse:Password>as advised by SDS team</wsse:Password>
                </wsse:UsernameToken>
            </wsse:Security>
        </SOAP-ENV:Header>
        <SOAP-ENV:Body>
            <m:DPSrequestToken xmlns:m="https://tpvs.hmrc.gov.uk/dpsauthentication">
                <m:version>1</m:version>
                <m:vendorID>your 4 digit vendorID</m:vendorID>
            </m:DPSrequestToken>
        </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    

1 个答案:

答案 0 :(得分:1)

如果其他人遇到同一个问题,我可以使用通常在2. C:\Program Files\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\中找到的WSDL.exe程序解决此问题。

此程序为Web服务创建一个代理类,允许您在代码中调用API的方法。

在命令行中,WSDL.exe的调用方式如下:3。

wsdl http://host/web_service/web_service.asmx?WSDL