0

Web サービスのコンシューマーである Windows デスクトップ アプリ (WCF を使用) を作成しようとしています。

アプリケーション:

  • SOAP メッセージを英国政府サーバーに送信して、渡された引数に基づいて認証トークンを取得します

  • そのサーバーから、認証トークンを含む文字列の形式で応答を取得します。

英国政府からの SOAP メッセージのテンプレートと、サービス用の WSDL ファイルがあります。

私が試したこと

  1. WSDL ファイルを使用してサービス参照を追加します。次のエラーを受け取りました: URI 形式はサポートされていません。
  2. サービスの URL を使用して Web 参照を追加します。次のエラーを受け取りました: リクエストは HTTP ステータス 405 で失敗しました: メソッドは許可されていません。
  3. POST を使用して SOAP 要求を送信します。GetResponse() の呼び出しで 500 外部サーバー エラーがスローされました。

注: 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>

石鹸:

<!-- 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>
4

1 に答える 1

1

他の誰かが同じ問題に遭遇した場合に備えて、通常は 2. にある WSDL.exe プログラムを使用してこの問題を解決できましたC:\Program Files\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\

このプログラムは、コード内で API のメソッドをローカルに呼び出すことができる Web サービスのプロキシ クラスを作成します。

コマンド ラインでは、WSDL.exe は次のように呼び出されます。

wsdl http://host/web_service/web_service.asmx?WSDL  
于 2013-06-25T22:19:59.333 に答える