Heim  >  Fragen und Antworten  >  Hauptteil

So stellen Sie SOAP-API-Richtlinien-/Erweiterungsanforderungen im SOAP-Client bereit

<p>Ich muss eine Verbindung zu einer Soap-API herstellen ... Ich habe die Soap-API jetzt ein paar Mal verwendet, aber da 99 % der APIs jetzt ruhen, habe ich sie seit mehreren Jahren nicht verwendet</p> ; <p>Wenn ich die API mit dem Soap-Client aufrufe, erhalte ich </p> <pre class="brush:php;toolbar:false;">SOAP-ERROR: WSDL wird analysiert: Unbekannte erforderliche WSDL-Erweiterung „http://schemas.xmlsoap.org/ws/2004/09/policy“</ vor> <p>Wenn ich also die WSDL-Adresse im Browser öffne (Login/Passwort geschützt), kann ich diese Zeilen in der XML-Ausgabe sehen</p> <pre class="brush:php;toolbar:false;"><wsdl:definitions xmlns:p1="urn:haixin:all2crm"http://schemas.xmlsoap.org/ ws/2004/09/policy" "http://schemas.xmlsoap.org/wsdl/" name="SI_USBPC_REQUEST" <wsdl:documentation/> <wsp:UsingPolicy wsdl:required="true"/> <wsp:Policy wsu:Id="OP_SI_USBPC_REQUEST"/></pre> <p>Wo ich es habe</p> <pre class="brush:php;toolbar:false;"><wsp:Policy> <wsp:PolicyReference URI="#OP_SI_USBPC_REQUEST"/> </wsp:Policy></pre> <p>Wenn ich nach diesem Fehler suche, kann ich im gesamten Internet nur eine Ressource finden, deren Antwort darin besteht, die Richtlinienanforderung zu deaktivieren: <code><wsp:UsingPolicy wsdl:required="false "/> </code> aber ich besitze die API nicht. Wenn ich also nach dem Richtliniennamen <code>OP_SI_USBPC_REQUEST</code> suche, gibt es kein Problem, ich erhalte keine Ergebnisse, also habe ich Ich vermute, dass dies vom API-Besitzer festgelegt wurde. Einige benutzerdefinierte Namen</p> <p>Meine Frage lautet also: Soll ich die Richtlinie erstellen und sie der Soap-Kundenanfrage beifügen? Was ist der Zusammenhang zwischen Richtlinie und Erweiterungen, wenn ich die Fehlermeldung „Erweiterung fehlt“ erhalte, diese jedoch verschwindet, wenn ich die Richtlinienanforderung deaktiviere? </p> <p>Kann ich die Erweiterung irgendwo herunterladen? Was ist das Format...soll ich sie an die Soap-Client-Anfrage anhängen? </p> <p>Oder sollte es auf dem Server installiert werden? Wenn ich die Erweiterung irgendwie hinzufüge, verschwindet der Fehler dann, weil ich den Benutzernamen/das Passwort an den API-Aufruf angehängt habe, oder ist dies nur der erste Schritt und ich sollte mich danach um die Richtlinienanforderung kümmern?</p> <p>Übrigens verwende ich PHP, um die API aufzurufen, das ist mein Code</p> <pre class="brush:php;toolbar:false;">$options = [ 'login' => 'mlogin', 'password' => 'meinpasswort', ]; $client = new SoapClient("http://domain:port/dir/wsdl/?p=sa/92130e1ffa97338ba2d1fc026567031d" , $options );</pre> <p>Wenn ich die XML-Datei herunterlade und die Anforderung für eine lokale Datei deaktiviere und diese Dateiadresse im SOAP-Client verwende, kann ich dann diese Datei verwenden, um mit der API zu kommunizieren? (Mein Verständnis ist, dass die XML-Datei keine tatsächlichen Daten enthält, sondern nur die Schnittstelle/Definition für den Soap-Client ist und ich keine lokale Datei verwenden kann, um mit der Online-API zu kommunizieren, oder irre ich mich vielleicht?) < ;/p>
P粉511896716P粉511896716438 Tage vor578

Antworte allen(1)Ich werde antworten

  • P粉916553895

    P粉9165538952023-08-30 11:31:46

    消息“未知所需的 WSDL 扩展”意味着 SoapClient 在外部发现了一个元素 WSDL 命名空间的 wsdl:required 属性设置为 true (正如您在此处看到的)。

    因此,为了避免该错误,一种方法是将 wsdl:required 属性设置为 false

    完全可以下载 WSDL 文件、修改它并使用本地副本。只需确保使用 绝对路径,如此处所示。

    顺便说一下,此上下文中的“策略”指的是 WS-Policy 规范。

    Antwort
    0
  • StornierenAntwort