1

この wsdl が mono wsdl ツールに好まれない理由を知っている人はいますか? Microsoft がそれを解析します。XMethods オンラインの wsdl バリデーターが解析します。Mono は気に入らないようで、その理由を理解するのに十分な知識がありません。

# the error
mmcaughan@mmcaughan-dsktop:~/Projects/sftest$ wsdl enterprise.wsdl
Web Services Description Language Utility
Mono Framework v2.0.50727.1433

コードの生成中にいくつかの警告があります。

enterprise.wsdl - この Web 参照は WS-I Basic Profile v1.1 R2718 に準拠していません: 説明内の wsdl:binding は、それが参照する wsdl:portType と同じ wsdl:operations のセットを持たなければなりません。* サービス記述「urn:enterprise.soap.sforce.com」内のバインディング「SoapBinding」

ファイル 'SforceService.cs' を書き込んでいます

関連するWSDLパーツ(と思います)

  <!-- Soap PortType -->
    <portType name="Soap">
        <operation name="login">
            <documentation>Login to the Salesforce.com SOAP Api</documentation>
            <input message="tns:loginRequest"/>
            <output message="tns:loginResponse"/>
            <fault message="tns:LoginFault" name="LoginFault"/>
            <fault message="tns:UnexpectedErrorFault" name="UnexpectedErrorFault"/>
            <fault message="tns:InvalidIdFault" name="InvalidIdFault"/>
        </operation>


 <!-- Soap Binding -->
    <binding name="SoapBinding" type="tns:Soap">
        <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
        <operation name="login">
            <soap:operation soapAction=""/>
            <input>
                <soap:header use="literal" message="tns:Header" part="LoginScopeHeader"/>
                <soap:body parts="parameters" use="literal"/>
            </input>
            <output>
                <soap:body use="literal"/>
            </output>
            <fault name="LoginFault">
                <soap:fault name="LoginFault" use="literal"/>
            </fault>
            <fault name="UnexpectedErrorFault">
                <soap:fault name="UnexpectedErrorFault" use="literal"/>
            </fault>
            <fault name="InvalidIdFault">
                <soap:fault name="InvalidIdFault" use="literal"/>
            </fault>
        </operation>
4

1 に答える 1

2

今では古くて賢い...

wsdlからC#を生成しますwsdlenterprise.wsdl -n:Sforce -o:SforceService.cs

XmlAnyElementに空の名前空間を含めることはできないため、SforceService.csを開いて削除します

this ... [System.Xml.Serialization.XmlAnyElement(Namespace = "")] public System.Xml.XmlElement [] Any {get {return this.anyField; } set {this.anyField = value; }}

になります...publicSystem.Xml.XmlElement [] Any {get {return this.anyField; } set {this.anyField = value; }}

wsdlは、プライベートメンバーに対してxmlシリアル化を生成しますが、これは機能せず、修正する必要があります

未処理の例外:System.InvalidOperationException:メンバーLoginScopeHeaderValueFieldがクラスSforce.SforceServiceに見つかりません。

this ... [System.Web.Services.Protocols.SoapHeaderAttribute( "LoginScopeHeaderValueField")]

になります...[System.Web.Services.Protocols.SoapHeaderAttribute( "LoginScopeHeaderValue")]

ValueField"を検索してValueField"を置き換えます

次に、これが発生する可能性があります。これは、monoがトラストストアにルート証明書をインストールしないため、httpsが失敗するため失敗します。

未処理の例外:System.Net.WebException:要求の書き込みエラー:認証または復号化に失敗しました。at System.Net.WebConnectionStream.WriteHeaders()[0x00000] at System.Net.WebConnectionStream.SetHeaders(System.Byte [] buffer)[0x00000] at(wrapper remoting-invoke-with-check)System.Net.WebConnectionStream:SetHeaders (byte [])at System.Net.HttpWebRequest.SendRequestHeaders(ブール値propagate_error)[0x00000]

これは、mozillaに付属するすべての証明書を取得するmozrootsで修正されています...

mozroots --import --sync

その後、すべてが説明どおりに機能します

Sforce.SforceServiceバインディング=newSforce.SforceService(); Sforce.LoginResult loginResult = binding.login( "someuser"、 "somepass"); 等...

于 2011-03-26T02:07:28.800 に答える