Laden...

[erledigt] PHP NuSOAP Webservice Call in .NET (C#)

Erstellt von schillerdeluxe vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.430 Views
S
schillerdeluxe Themenstarter:in
138 Beiträge seit 2006
vor 12 Jahren
[erledigt] PHP NuSOAP Webservice Call in .NET (C#)

Hallo, ich habe leider etwas Schwierigkeiten einen mir zur Verfügung gestellt Webservice aufzurufen.
Es handelt sich um einen in php erstellen NuSOAP - Webservice (wenn man das so sagen kann ?) und der Aufruf passiert über HTTPS (SSL).

Ich habe den URL zur WSDL genommen und damit eine Service Reference hinzugefügt. Ohne weiteres Verändern der config Datei bekomm ich den "klassischen" Fehler
:> Fehlermeldung:

An error occurred while receiving the HTTP response to
>
. This could be due to the service endpoint binding not using the HTTP protocol. This could also be due to an HTTP request context being aborted by the server (possibly due to the service shutting down).

Der Aufruf schaut folgendermaßen aus:


ServicePointManager.ServerCertificateValidationCallback +=
                            (sender, certificate, chain, sslPolicyErrors) => true;
                        

                       var client = new WebServicesPortTypeClient();
                       client.ClientCredentials.UserName.UserName = "username";
                       client.ClientCredentials.UserName.Password = "password";
                        var xmlStringResult = client.WpCalculation(contents); // contents is a simple xml 

mit folgender config Datei:


<bindings>
        <basicHttpBinding>
          <binding name="WebServicesBinding" closeTimeout="00:01:00"
            openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
            allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
            maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
            messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
            useDefaultWebProxy="true">
            <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
              maxBytesPerRead="4096" maxNameTableCharCount="16384" />
            <security mode="Transport">
              <transport clientCredentialType="None" proxyCredentialType="None"
                realm="" />
              <message clientCredentialType="UserName" algorithmSuite="Default" />
            </security>
          </binding>
        </basicHttpBinding>
      </bindings>
        <client>
            <endpoint address="https://domain/webservices.php"
                binding="basicHttpBinding" bindingConfiguration="WebServicesBinding"
                contract="ServiceName.WebServicesPortType" name="WebServicesPort" />
        </client>

Ich habe versucht (auf Grund meiner Unwissenheit) die configs anzupassen allerdings fliegen mir so oder so nur die Exceptions um den Kopf:

Zum Beispiel hab ich die clientCredentialType auf Basic gestellt, worauf ich folgende Fehlermeldung bekomme:

Fehlermeldung:
The server did not provide a meaningful reply; this might be caused by a contract mismatch, a premature session shutdown or an internal server error.

Hat irgendjemand eine Ahnung was ich falsch mache, bzw. wo der Fehler begraben sein könnte?

Dankechön

S
schillerdeluxe Themenstarter:in
138 Beiträge seit 2006
vor 12 Jahren

Ok, Fehler "gefunden".

Das erste Problem war tatsächlich ein Authentifizierungsproblem. Ich hab mir zwar die Proxy-Klassen und die Config Datei vom VS erstellen lassen, allerdings war im .config File die Einstellung falsch womit er sich anmelden soll.

<security mode="Transport">
              <transport clientCredentialType="Basic" proxyCredentialType="None"
                realm="" />
              <message clientCredentialType="UserName" algorithmSuite="Default" />
            </security>

Basic war genau der Wert der eigentlich gesetzt sein hätte müssen.

Die Fehlermedldung > Fehlermeldung:

The server did not provide a meaningful reply; this might be caused by a contract mismatch, a premature session shutdown or an internal server error.

war hingegen schwieriger zu erklären.
Ich nahm daher Kontakt mit dem Entwickler-Team des zur Verfügung gestellten Webservice auf und es folgten viele viele Traces am Webserver und bei mir am Fiddler.
Nach eine Reihe von Versuchen funktionierte der Webservice und ich bekam tatsächlich das richtige Ergebnis zurück. Mir wurde erklärt, dass die NuSOAP php eine Konfiguration falsch gesetzt war, wodurch das unkodierte XML mit all seinen Spitzen Klammern eine Exception schmiss und somit den Service abbrach.

Hoffe die Nachwelt kann von diesen "verschwendeten" Arbeitstag profitieren: