none
Zugriff auf Webservice RRS feed

  • Frage

  • Hallo,
    in Visual Studio habe ich einen WebService erstellt und als Verweis eingebunden.
    Das alles funktioniert auch so wie es soll.
    Jedenfalls, solange das Projekt lokal ausgeführt wird.
    Wird das Web-Projekt zum IIS übertragen, dann kommt beim Aufruf der Fehler:404 - not found.

    Nach einem Blick in den .svcmap des Services ist es auch klar warum. Die SourceURL verweist auf http://localhost:01234/WebService.svc.
    Kann ja nicht funktionieren.
    Also muss der Service irgendwo gehostet werden, um diesen dann einzubinden und aufrufen zu können.
    Könnte mir dazu vielleicht jemand einen Tipp geben?


    Viele Grüße, Volker

    Dienstag, 27. Juni 2017 10:51

Antworten

Alle Antworten

  • Hallo Volker,

    Webservices kann man ebenso im IIS hosten, als Beispiel für WCF: Deploying an Internet Information Services-Hosted WCF Service


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Dienstag, 27. Juni 2017 12:00
  • Hallo Olaf,
    danke für dein Interesse.
    Also wenn ich das halbwegs richtig verstanden habe, dann könnte ich mir eine separate Webanwendung erstellen, die nur die WCF-Services hostet?
    Mit VS erstelle ich dann die Services und übertrage diese zum Webserver?
    Aber wie bekomme ich die Verweise zum localhost raus? Die stehen ja in der .svcmap immer noch drin. Muss ich die von Hand ändern?

    In den Webanwendungen, die diese Services nutzen, müsste ich dann einen Webverweis hinzufügen, oder?

    Entschuldige bitte meine naive Fragerei.


    Viele Grüße, Volker

    Dienstag, 27. Juni 2017 12:28
  • Hallo Volker,

    genau so.

    Den bestehenden Webverweis musst Du nicht von Hand ändern, sondern ihn in VS zur Bearbeitung öffnen, URL ändern und aktualisieren lassen. Gleiches macht man auch, wenn z.B. im WebService neue Methoden hinzugekommen sind, die man einbinden möchte.


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Mittwoch, 28. Juni 2017 05:56
  • Hallo Olaf,
    hast Recht. :/

    Also ich hab jetzt den WebService per http neu eingebunden.

    Leider kommt funktioniert das jetzt nicht mehr.
    Die Browser-Console gibt folgendes aus:
    "XMLHttpRequest cannot load http://testsite.firma.local:1560/SKFiles.svc/GetFiles. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:55321' is therefore not allowed access. The response had HTTP status code 405."

    Kein Zugriff??
    Rufe ich den Service über die URL direkt auf, funktioniert es.
    Irgend eine Idee?


    Viele Grüße, Volker

    Mittwoch, 28. Juni 2017 07:14
  • Hallo miteinander,
    es funktioniert jetzt, nachdem ich die Website wieder am HTTP-Standard-Port 80 betreibe (Zum testen habe ich mir ein Testsite jenseits des Standardports bereitgestellt).

    Trotzdem die Frage: Wie muss ich was konfigurieren, wenn ich einen anderen Port einsetzen möchte? Eigentlich sollte es doch egal sein, wenn in der URL auf auf das Root-Verzeichnis verwiesen wird. Oder sieht das JavaScript anders?

    Evtl. kann mir da jemand auf die Sprünge helfen.


    Viele Grüße, Volker


    • Bearbeitet Volker S Donnerstag, 29. Juni 2017 09:19
    Donnerstag, 29. Juni 2017 09:18
  • Ich schon wieder...
    Auch auf die Gefahr hin, dass ich mit mir selbst rede, habe ich doch noch ein Problem.
    Wie bereits im letzten Post beschrieben, funktioniert es, jedoch nur wenn ich den Service aus der eigene Domain aufrufe.
    Zur Erklärung: Die Services laufen separat (http://wcf.meineFirma.local).

    Der Aufruf aus http://webseite.meineFirma.local wirft immer noch einen JavaScript-Fehler:

    15:43:18.659 jquery-3.1.1.js:9536 OPTIONS http://wcf.meineFirma.local/Services/SKFiles.svc/GetFiles 404 (Not Found)
        send @ jquery-3.1.1.js:9536
        ajax @ jquery-3.1.1.js:9143
        CallService @ Qualimatrix.aspx:54
        fnGetFiles @ Qualimatrix.aspx:50
        onclick @ Qualimatrix.aspx:1
    15:43:18.660 jquery-3.1.1.js:9536 OPTIONS http://wcf.meineFirma.local/Services/SKFiles.svc/GetFiles 404 (Not Found)
        send @ jquery-3.1.1.js:9536
        ajax @ jquery-3.1.1.js:9143
        CallService @ Qualimatrix.aspx:54
        fnGetFiles @ Qualimatrix.aspx:50
        onclick @ Qualimatrix.aspx:1
    15:43:18.660 Qualimatrix.aspx:1 XMLHttpRequest cannot load http://wcf.meineFirma.local/Services/SKFiles.svc/GetFiles. Response for preflight has invalid HTTP status code 404

    Darüber hinaus musste ich ebenfalls die anonyme Autorisierung für diese Site aktivieren (vorher nur Windows-Authent.). Ansonsten gibts auch nur Fehler.

    Hat denn jemand eine Idee, wo ich da ansetzen kann?
    Lt. einschlägiger Seiten habe ich bereits mit AddHeader in der web.config und anderen Parametern herumprobiert, aber bisher erfolglos.


    Viele Grüße, Volker



    • Bearbeitet Volker S Donnerstag, 29. Juni 2017 13:55
    Donnerstag, 29. Juni 2017 13:51
  • Hi,

    Du hast beim Aufruf über verschiedene Domains hinweg ein Problem mit den Sicherheitseinstellungen der Browser. Diese verbieten domainübergreifende Zugriffe (Same-Origin-Policy)

    Abhilfe schafft in dem Fall CORS. Siehe dazu:

      https://de.wikipedia.org/wiki/Cross-Origin_Resource_Sharing

    Wie genau Du jetzt vorgehen musst, hängt vom Webservice ab, den Du da ansprichst. Dieser muss die entsprechenden Header zurückliefern.

      https://docs.microsoft.com/en-us/aspnet/web-api/overview/security/enabling-cross-origin-requests-in-web-api

      https://forums.asp.net/t/2066964.aspx?webservice+Access+Control+Allow+Origin+header+is+present+on+the+requested+resource

    Am einfachsten ist in der Regel die Einstellung über die web.config (siehe im letzten Link und dort in der grün markierten Antwort)


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    • Als Antwort markiert Volker S Freitag, 30. Juni 2017 06:30
    Donnerstag, 29. Juni 2017 13:59
    Moderator
  • Hallo Stefan,
    ach, was würde ich bloß ohne dich machen.
    Es funktioniert.
    Ich hatte mich mit dem Thema CORS schon auseinander gesetzt und auch die Werte in der web.config gesetzt. Aber es läuft nur, wenn ich es über die Global.asax einstelle.

    Ich danke dir.


    Viele Grüße, Volker

    Freitag, 30. Juni 2017 06:30