Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
[erledigt] PHP NuSOAP Webservice Call in .NET (C#)
schillerdeluxe
myCSharp.de - Member



Dabei seit:
Beiträge: 141
Herkunft: Österreich

Themenstarter:

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

beantworten | zitieren | melden

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
:
Fehler
An error occurred while receiving the HTTP response to https://domain/webservices.php. 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:
Fehler
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
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von schillerdeluxe am .
private Nachricht | Beiträge des Benutzers
schillerdeluxe
myCSharp.de - Member



Dabei seit:
Beiträge: 141
Herkunft: Österreich

Themenstarter:

beantworten | zitieren | melden

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
Fehler
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:
private Nachricht | Beiträge des Benutzers