Wie auf ein PHP-Web-Service aus ASP.Net?
Ich versuche ein web service in C# ASP.Net Web-Anwendung. Die Dienstleistung ist gebaut in PHP und liegt auf einigen remote-server nicht unter meiner Kontrolle, so kann ich es ändern zum hinzufügen von meta-Daten oder etwas anderes in es.
Wenn ich die "Add Web Reference" - option in Visual Studio 2008,
Ich erhalte die folgende Fehlermeldung:
HTML-Dokument nicht enthalten Web
service discovery Informationen.
beim Versuch, fügen Sie die folgende web service.
https://subreg.forpsi.com/robot2/subreg_command.php?wsdl
Den web-service-Funktionen werden ausgesetzt und wird in Visual Studio 2008. ich konnte jedoch nicht den Verweis hinzuzufügen, um es für den Einsatz in ASP.Net -Anwendung.
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 ( )
transfer_domain ( )
-
Habe ich auch versucht die wsdl.exe Methode durch die Abfrage der xml kopieren und mit einer wsdl-Datei und die Generierung einer proxy-Klasse. Aber die wsdl-Ausgabe enthält Warnungen, und der proxy-Klasse generiert, überspringt der exponierten Funktionen und erzeugt so etwas wie dieses:
//CODEGEN: Der Betrieb verbindlich "create_contact' aus dem Namensraum 'urn:t3' wurde ignoriert. Jede Nachricht Teil in einem use=verschlüsselte Nachricht muss einen Typ angeben.
//CODEGEN: Der Betrieb verbindlich "get_contact' aus dem Namensraum 'urn:t3' wurde ignoriert. Jede Nachricht Teil in einem use=verschlüsselte Nachricht muss einen Typ angeben.
//CODEGEN: Der Betrieb verbindlich "get_domain_info' aus dem Namensraum 'urn:t3' wurde ignoriert. Jede Nachricht Teil in einem use=verschlüsselte Nachricht muss einen Typ angeben.
//CODEGEN: Der Betrieb verbindlich "get_last_error_code' aus dem Namensraum 'urn:t3' wurde ignoriert. Jede Nachricht Teil in einem use=verschlüsselte Nachricht muss einen Typ angeben.
//CODEGEN: Der Betrieb verbindlich "get_last_error_msg' aus dem Namensraum 'urn:t3' wurde ignoriert. Jede Nachricht Teil in einem use=verschlüsselte Nachricht muss einen Typ angeben.
//CODEGEN: Der Betrieb verbindlich "get_NSSET' aus dem Namensraum 'urn:t3' wurde ignoriert. Jede Nachricht Teil in einem use=verschlüsselte Nachricht muss einen Typ angeben.
//CODEGEN: Der Betrieb verbindlich "get_owner_mail' aus dem Namensraum 'urn:t3' wurde ignoriert. Jede Nachricht Teil in einem use=verschlüsselte Nachricht muss einen Typ angeben.
//CODEGEN: Der Betrieb verbindlich "send_auth_info' aus dem Namensraum 'urn:t3' wurde ignoriert. Jede Nachricht Teil in einem use=verschlüsselte Nachricht muss einen Typ angeben.
//CODEGEN: Der Betrieb verbindlich "transfer_domain' aus dem Namensraum 'urn:t3' wurde ignoriert. Jede Nachricht Teil in einem use=verschlüsselte Nachricht muss einen Typ angeben.
//CODEGEN: Der Betrieb verbindlich "request_sendmail' aus dem Namensraum 'urn:t3' wurde ignoriert. Jede Nachricht Teil in einem use=verschlüsselte Nachricht muss einen Typ angeben.
//CODEGEN: Der Betrieb verbindlich 'login' aus dem Namensraum 'urn:t3' wurde ignoriert. Jede Nachricht Teil in einem use=verschlüsselte Nachricht muss einen Typ angeben.
//CODEGEN: Der Betrieb verbindlich "register_domain' aus dem Namensraum 'urn:t3' wurde ignoriert. Jede Nachricht Teil in einem use=verschlüsselte Nachricht muss einen Typ angeben.
//CODEGEN: Der Betrieb verbindlich "register_domain_with_admin_contacts' aus dem Namensraum 'urn:t3' wurde ignoriert. Jede Nachricht Teil in einem use=verschlüsselte Nachricht muss einen Typ angeben.
//CODEGEN: Der Betrieb verbindlich "renew_domain' aus dem Namensraum 'urn:t3' wurde ignoriert. Jede Nachricht Teil in einem use=verschlüsselte Nachricht muss einen Typ angeben.
Edit:
Habe ich versucht, dieses Stück code für meine hand codiert Klasse.
public String makeWebRequest(String methodName)
{
//Create the web request
HttpWebRequest request = WebRequest.Create("https://subreg.forpsi.com/robot2/subreg_command.php/") as HttpWebRequest;
//Add authentication to request
request.Credentials = new NetworkCredential("[email protected]", "bar");
request.Method = "POST";
request.ContentType = "text/xml";
request.Headers.Add("SOAPAction: https://subreg.forpsi.com/robot2/subreg_command.php/" + methodName);
//Get response
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
//Get the response stream
StreamReader reader = new StreamReader(response.GetResponseStream());
//Console application output
//Console.WriteLine(reader.ReadToEnd());
return reader.ReadToEnd();
}
}
Aber wenn ich versuche, eine Reaktion zu erhalten, dann gibt es
Dem remote server hat einen Fehler zurückgegeben: (500) Internal Server Error.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als verwiesen wird, dass - Sie zur hand haben code "proxy" für diesen web-service.
Einem Beispiel manuell, mit dem ein web-service-Aufruf - müssen Sie möglicherweise zu zwicken die Methode einige.
Würde ich empfehlen, xsd, die verwendet werden können, um Objekte generieren (mit xsd.exe) und dann können Sie serialisiert/deserialisiert Reaktionen und Anfragen, die eigentlich Objekte.
BEARBEITEN:
GetSoapString () - Methode
Für Steve ' s Reference
Rufen Sie aussieht:
Antwort:
"webservice" ist ein sehr allgemeiner Begriff. Einige Arten von webservice zu implementieren, die ein WSDL - aber es ist nicht eine Anforderung. IIRC eine SOAP-Schnittstelle ist nötig, um ein WSDL -, und beide nuSOAP und PHP-SOAP-Erweiterung, die Unterstützung von WSDL. So wie es aussieht die Gegenstelle wurde nicht richtig umgesetzt.
Bearbeiten:
Zuvor bekam ich einen 500 Internal server error, weil meine Seife Zeichenfolge wurde nicht korrekt formatiert. Ich ananlyzed die xml zurückgegeben werden, aus dem web-Dienst und baute meine Seife string Nachricht von Blick auf xml.
Schließlich habe ich über das problem mit Hilfe von Dan ^ & einige wenig Forschung über das internet. Dank Dan.
Nun das nächste problem ist die übergabe der richtigen Anmeldeinformationen und den Prozess der Reaktion auf andere Sachen...
btw, war hier die Antwort....
Bearbeiten:
Der Wert false ist Ok, wie ich bin, Versand in die falsche Anmeldeinformationen. ich nenne andere Funktionen des web-service in eine ähnliche Mode und war in der Lage, um alle Funktionen des web-service und rufen die entsprechenden Werte zurück und führen Sie dann eine andere Verarbeitung.
Bedankt sich bei allen, die dazu beigetragen, beitragen, um das problem zu lösen.
Hinsichtlich