locked
Wie konfiguriere ich einen WCF Service richtig? RRS feed

  • Frage

  • Hallo zusammen,

    ich habe leider ein Problem bei dem ich nicht genau sagen kann woran es liegt.

    Folgendes Szenario:

    Es sollte ein WebService eingerichtet werden der Methoden zu Verfügung stellt über die auf Datenbanken zugegriffen werden kann. Dieser sollte dann auf einem Server deployt werden der eigentlich nur im Firmeninternen Netz zugänglich ist. Also musste auch noch bewekstelligt werden, dass der WebService extern ansprechbar wird.

    Ich habe den Service implementiert und auf den besagten Server installiert. Dazu sei gesagt die einzigen Veränderungen die ich dabei an der Web.config vorgenommen habe, war das Aktivieren von Diagnostics (messageLogging) und TraceListenern.

    Nun wurde das ganze aus dem internen Netz getestet und hat wunderbar funktioniert. Dazu sei gesagt es gab zwei Testfälle:

    1. Aus einer C# Anwendung aus (unter Windows versteht sich).
    2. Aus einer PHP Anwendung aus (unter Ubuntu).

    Wie gesagt haben beide auf den Service zugreifen und die Methode konsumieren können. Nun sollte der Service auch extern zugänglich sein. Da hat mein Know-How aufgehört und andere haben das erledigt. So wie ich das verstehe wurde für die Service-URL ein DNS Eintrag erstellt und damit dieser auch aus dem Internet  zugänglich wird.

    Und hier habe ich nun auch probleme. Unter der externen URL lässt sich der Service nicht konsumieren. An dieser Stelle sein nochmal gesagt, dass ich nichts an der web.config verändertz habe. Ich habe keine Bindings, keine Endpoints etc. hinzugefügt. So wie ich das verstehe werden dann einfach default Werte benutzt.

    Die Test-Seite des Dienstes lässt sich aufrufen und man kann sich auch die WSDL anzeigen lassen, versucht man jedoch den dort angegebenen svcutil.exe Befehl in der Entwicklerkonsole auszuführen kommen folgende Meldungen:

    //Fehler: Aus https://Foo.de/webservices/BarService.svc?wsdl können keine Metadaten abgerufen werden.

    Bei dem selben Aufruf:

    /*Metadaten enthalten einen Verweis, der nicht aufgelöst werden kann: "https://Foo.de/webservices/BarService.svc?wsdl".

    Metadaten enthalten einen Verweis, der nicht aufgelöst werden kann: "https://Foo.de/webservices/BarService.svc?wsdl".

    HTTP GET error

    URI: https://Foo.de/webservices/BarService.svc?wsdl

    Das Dokument wurde erkannt, konnte jedoch nicht verarbeitet werden.

    - Das WSDL-Dokument enthält Links, die nicht aufgelöst werden konnten.

    - Fehler beim Downloaden von "https://Foo.de:443/webservices/BarService.svc??xsd=xsd0"

    Timeout für Vorgang überschritten...*/

    In den TraceLogs sehen die Meldungen etwas anders aus:

    /*Die Nachricht mit Action "https://Foo.de/webservices/BarService/MeineMethode" kann aufgrund

    einer fehlenden ContractFilter-Übereinstimmung beim EndpointDispatcher nicht verarbeitet werden.*/

    Ich habe außerdem versucht eben diesen Dienst über WCFStorm anzusprechen. Auch hier bekommen ich diverse Fehlermeldungen:

    INFO  : 14-09-01 11.51.54.56 : Discovering https://Foo.de/webservices/BarService.svc?wsdl/mex
    INFO  : 14-09-01 11.55.16.05 : Generating proxy code.
    INFO  : 14-09-01 11.55.16.05 : Done.
    INFO  : 14-09-01 11.55.16.06 : Compiling...
    INFO  : 14-09-01 11.55.16.21 : Done.
    ERROR : 14-09-01 11.55.16.21 : Endpoint is invalid. Make sure that the service has an exposed MEX (wsdl) endpoint.

    Eigentlich scheinen die Meldungen selbsterklärend zu sein. Beispielsweise lässt die Meldung des WCF storm vermuten, dass Endpunkte konfiguriert werden müssen. Der Tracelog wiederrum sagt, dass Contracts eingerichtet werden müssen. Die entwicklungskonsole sagt, dass die xsd nicht geladen werden kann.

    Was ich bisher probiert habe.

    Ich habe Endpoints konfiguriert, dabei habe ich beides probiert MEX/httpBinding. Dann kann ich auf den Dienst garnicht mehr zugreifen. Der PHP Client hat außerdem probiert die xsd lokal zu laden und hatte trotzdem keinen Zugriff. Was ich vor allem nicht verstehe ist warum der Service im lokalen Netz super funktioniert und über das Internet nicht. Vor allem weil man sich im Browser die wsdl und die Testseite anzeigen lassen kann. WCFStrom scheint sogar etwas zu kompilieren.

    Übrigens habe ich sämtliche Firewallbedingte Ursachen ausschließen können.

    Ich kann mir vorstellen, dass es wohl fast unmöglich ist eine ausführliche Ferndiagnose zu diesem Problem abzugeben. Vielleicht hat aber einer Bereits ähnliche Probleme gehabt oder kann einen Tipp geben woran es liegen könnte. Vielleicht liegt es auch tatsächlich an den Endpunkten und Jemand kann mir sagen worauf genau ich bei der Erstellung achten soll, weil sie sonst immer den Dienst absolut unzugänglich machen.

    Vielen Dank im Voraus!



    Algorithmen und Datenstrukturen in C#: TechNet Wiki

    Montag, 1. September 2014 10:24

Alle Antworten