Wie kann ich von ASP.Net auf einen PHP Web Service zugreifen?

8

Ich versuche, einen Webdienst in einer C # ASP.Net-Webanwendung zu verwenden. Der Dienst ist in PHP integriert und befindet sich auf einem entfernten Server, den ich nicht kontrollieren kann. Daher kann ich ihn nicht ändern, um Metadaten oder etwas anderes hinzuzufügen.

Wenn ich die Option "Web-Referenz hinzufügen" in Visual Studio 2008 verwende, Ich erhalte den folgenden Fehler:

  

Das HTML-Dokument enthält kein Web   Service-Discovery-Informationen.

beim Versuch, den folgenden Webdienst hinzuzufügen.

Ссылка

Die Web-Service-Funktionen werden in Visual Studio 2008 angezeigt und angezeigt. Allerdings konnte ich den Verweis für die ASP.Net-Anwendung nicht hinzufügen.

  

t3Service "Beschreibung

     

Methoden   __construct ()

     

create_contact ()

     

get_contact ()

     

get_domain_info ()

     

get_last_error_code ()

     

get_last_error_msg ()

     

get_NSSET ()

     

get_owner_mail ()

     

login ()

     

register_domain ()

     

register_domain_with_admin_contacts (   )

     

renew_domain ()

     

request_sendmail ()

     

send_auth_info ()

     

Übertragungsdomäne ()

  1. Ich habe auch die wsdl.exe-Methode ausprobiert, indem ich die XML-Datei abgerufen und in eine WSDL-Datei kopiert und eine Proxy-Klasse generiert habe. Aber die WSDL-Ausgabe enthält Warnungen und die generierte Proxy-Klasse überspringt die exponierten Funktionen und generiert etwa Folgendes:

    // CODEGEN: Die Operation binding 'create_contact' aus dem Namespace 'urn: t3' wurde ignoriert. Jeder Nachrichtenteil in einer use = codierten Nachricht muss einen Typ angeben. // CODEGEN: Die Operation bind 'get_contact' aus dem Namespace 'urn: t3' wurde ignoriert. Jeder Nachrichtenteil in einer use = codierten Nachricht muss einen Typ angeben. // CODEGEN: Die Operation binding 'get_domain_info' aus dem Namespace 'urn: t3' wurde ignoriert. Jeder Nachrichtenteil in einer use = codierten Nachricht muss einen Typ angeben. // CODEGEN: Die Operation 'get_last_error_code' aus dem Namespace 'urn: t3' wurde ignoriert. Jeder Nachrichtenteil in einer use = codierten Nachricht muss einen Typ angeben. // CODEGEN: Die Operation Bindung 'get_last_error_msg' vom Namensraum 'urn: t3' wurde ignoriert. Jeder Nachrichtenteil in einer use = codierten Nachricht muss einen Typ angeben. // CODEGEN: Die Operation Bindung 'get_NSSET' vom Namensraum 'urn: t3' wurde ignoriert. Jeder Nachrichtenteil in einer use = codierten Nachricht muss einen Typ angeben. // CODEGEN: Die Operation bind 'get_owner_mail' aus dem Namespace 'urn: t3' wurde ignoriert. Jeder Nachrichtenteil in einer use = codierten Nachricht muss einen Typ angeben. // CODEGEN: Die Operation 'send_auth_info' vom Namensraum 'urn: t3' wurde ignoriert. Jeder Nachrichtenteil in einer use = codierten Nachricht muss einen Typ angeben. // CODEGEN: Die Operation binding 'transfer_domain' aus dem Namespace 'urn: t3' wurde ignoriert. Jeder Nachrichtenteil in einer use = codierten Nachricht muss einen Typ angeben. // CODEGEN: Die Operation binding 'request_sendmail' aus dem Namespace 'urn: t3' wurde ignoriert. Jeder Nachrichtenteil in einer use = codierten Nachricht muss einen Typ angeben. // CODEGEN: Die Operation 'Login' vom Namespace 'urn: t3' wurde ignoriert. Jeder Nachrichtenteil in einer use = codierten Nachricht muss einen Typ angeben. // CODEGEN: Die Operation binding 'register_domain' aus dem Namespace 'urn: t3' wurde ignoriert. Jeder Nachrichtenteil in einer use = codierten Nachricht muss einen Typ angeben. // CODEGEN: Die Operation binding 'register_domain_with_admin_contacts' aus dem Namespace 'urn: t3' wurde ignoriert. Jeder Nachrichtenteil in einer use = codierten Nachricht muss einen Typ angeben. // CODEGEN: Die Operation 'renew_domain' aus dem Namespace 'urn: t3' wurde ignoriert. Jeder Nachrichtenteil in einer use = codierten Nachricht muss einen Typ angeben.

Bearbeiten:

Ich habe diesen Code für meine handcodierte Klasse ausprobiert.

%Vor%

Aber wenn ich versuche, eine Antwort zu erhalten, gibt es

zurück
  

Der Remote-Server hat einen Fehler zurückgegeben: (500) Interner Serverfehler.

    
Steve Johnson 18.03.2010, 12:02
quelle

3 Antworten

6

Wie bereits erwähnt, müssen Sie Ihren "Proxy" für diesen Web-Service handcodieren.

Ein Beispiel für das manuelle Ausführen eines Web-Service-Aufrufs - Sie müssen die Methode möglicherweise etwas anpassen.

%Vor%

Ich würde empfehlen, xsd's zu erstellen, die verwendet werden können, um Objekte zu generieren (mit xsd.exe) und dann können Sie Antworten und Anfragen serialisieren / deserialisieren auf Objekte.

BEARBEITEN: GetSoapString () -Methode

%Vor%

Für Steves Referenz

Rufen Sie einen an:

%Vor%

Antwort:

%Vor%     
Dan 18.03.2010, 16:53
quelle
1

"webservice" ist ein sehr allgemeiner Begriff. Einige Arten von Webdiensten können eine WSDL implementieren - dies ist jedoch keine Voraussetzung. IIRC Eine SOAP-Schnittstelle wird benötigt, um eine WSDL bereitzustellen, und sowohl nuSOAP als auch die PHP-SOAP-Erweiterung unterstützen WSDL. Es sieht also so aus, als wäre das entfernte Ende nicht richtig implementiert worden.

    
symcbean 18.03.2010 16:36
quelle
0

Bearbeiten: Zuvor hatte ich einen Fehler mit 500 internen Servern, weil meine Soap-Zeichenfolge nicht korrekt formatiert war. Ich analysierte das XML, das vom Webservice zurückgegeben wurde, und erstellte meine Soap-String-Nachricht, indem ich xml anschaue. Schließlich habe ich das Problem mit Hilfe von Dan ^ & amp; ein bisschen Forschung über das Internet. Danke Dan.

  

Ich habe den 500 Serverfehler überstanden. Jetzt ich   bin in der Lage eine Antwort von Login zu bekommen   Scheitern atleast ...

%Vor%

Jetzt ist das nächste Problem, die richtigen Zugangsdaten zu übergeben und die Antwort zu bearbeiten, um andere Sachen zu machen ...

BTW, hier war die Antwort ....

%Vor%

Bearbeiten: Der Wert false ist Ok, da ich die falschen Anmeldedaten sende. Ich rufe auf ähnliche Weise andere Funktionen des Web-Service auf und konnte alle Funktionen des Web-Service aufrufen und die entsprechenden Rückgabewerte abrufen und dann eine andere Verarbeitung durchführen.

Danke an alle, die dazu beigetragen haben, das Problem zu lösen.

Grüße

    
Steve Johnson 19.03.2010 04:47
quelle

Tags und Links