locked
Silverlight Deployment Load Error: Query Not Found RRS feed

  • Frage

  • Hi

    Ich versuche grade verzweifelt meine Silverlight 4 App mit RIA Services auf dem WebServer (IIS6) zu veröffentlichen. Die App bezieht ihre Daten aus einer SQL Server Datenbank, die allerdings auf einem anderen WebServer liegt.

    Die HTML und XAP Datei der App habe ich in einem Virtuellen Verzeichnis des IIS untergebracht und die Securtiy Einstellungen auf "Windows Authentifizierung" gesetzt.
    Anschließend habe ich die web.config bearbeitet. Diese sieht nun wie folgt aus:

    <configuration>
     <system.web>
      <authentication mode="Windows"/>
      <httpModules>
       <add name="DomainServiceModule" type="System.ServiceModel.DomainServices.Hosting.DomainServiceHttpModule, System.ServiceModel.DomainServices.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
      </httpModules>
      <compilation debug="true" targetFramework="4.0">
       <assemblies>
        <add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
       </assemblies>
      </compilation>
     </system.web>
     <connectionStrings>
      <remove name="LeitnivellementEntities" />
      <add name="LeitnivellementEntities" connectionString="metadata=res://*/Model2.csdl|res://*/Model2.ssdl|res://*/Model2.msl;provider=System.Data.SqlClient;provider connection string="data source=SQLSERVER;initial catalog=****;user id=****;password=****;Integrated Security=false;multipleactiveresultsets=True;User Instance=False;App=EntityFramework"" providerName="System.Data.EntityClient" />
     </connectionStrings>
     <system.serviceModel>
      <behaviors>
       <serviceBehaviors>
        <behavior name="">
         <dataContractSerializer maxItemsInObjectGraph="2147483647" />
        </behavior>
       </serviceBehaviors>
      </behaviors>
      <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
     </system.serviceModel>
    </configuration>

    Ich kann die App jetzt auch öffnen, aber es werden keine Daten geladen. Stattdessen erscheint eine Fehlermeldung in der steht das die Abfrage "GetIrgendwas" nicht gefunden werden konnte.

    Mit Hilfe von Fiddler bin ich nun soweit das es sich dabei um Error 403 handelt.

    Irgendwelche Ideen was ich falsch mache?

    Dienstag, 28. Juni 2011 07:50

Antworten

  • Publish vom Visual Studio funktioniert bei mir problemlos. Ich mache es aber aber 2-stufig: publish lokal und dann ftp. Da behalte ich wenigstens den Überblick.
     
    Beim publish werden die xap und ggf. die zusätzlichen zip-Dateien (wenn reduce xap size gesetzt ist) in das in der Web-Anwendung vorgesehene Verzeichnis kopiert (üblicherweise ClientBin). Problematisch sein kann ein Schreibschutz, der beispielsweise beim Check-In in die Quellcodeverwaltung gesetzt wird. Das sollte im Pre- oder Post-Build des Silverlight-Projektes eine entsprechende Anweisung eingefügt werden.
     
    Beim ftp ist das Zielverzeichnis zu nutzen, was später auch vom virtuellen Pfad beim Zugriff auf den IIS genutzt wird.
     
    Beim ConnectionString ist zu berücksichtigen, unter welchem Konto der WebService läuft und mit welchem Konto dann letztendlich auf den SQL Server zugegriffen wird. In Deinem Beispiel greifst Du ohne Nutzerauthentifizierung mit vorgegebenem SQL Server Konto zu (LeitnivellementEntities). Wenn das bei Dir lokal funktioniert, hat entweder der WebServer keine Verbindung zum SQL Server oder die Verbindung wird aus irgendeinem Grund blockiert (firewall, kein TCP im SQL Server zulässig usw.). In solchen Fällen schreibe ich mir eine Testmethode, die schrittweise den Webservice testen lässt, z.B. zuerst nur Rückgabe einer Serverzeit, dann erfolgreiches Open der Connection zum Datenbankserver und zuletzt den einen Lesezugriff zum konkreten Catalog.
     
    --
    Viele Grüße
    Peter
    Dienstag, 28. Juni 2011 10:56

Alle Antworten

  • Bist du sicher das der ConnectionString zu dem neuen DB Server funktioniert?

    Dienstag, 28. Juni 2011 08:19
    Beantworter
  • Ich nutze ja den selben String wenn ich die Anwendung auf meinem lokalen Rechner ausführe. Und da funktioniert soweit alles.
    Ich bin allerdings auch ziemlich unsicher was die Authentifiezierung angeht. Ich meine vom theoretischen Ablauf her.

    Die Anwendung liegt auf dem WebServer. Der SQL Server auf nem anderen Server.

    Im Moment habe ich ja auf dem WebServer "Windwos Authentifizierung" ausgewählt.
    Der Zugriff auf den SQL Server erfolgt, wie man am ConnectionString sieht, aber ja mit SQL Server Authentifizierung.
    Ist das so überhaupt richtig?

    2. Weiß ich auch gar nicht ob ich die richtigen Datein auf den Server gepackt habe. Reichen XAP und HTML aus dem Debug Verzeichnis aus?

     

     

    Dienstag, 28. Juni 2011 08:45
  • Du musst die Dlls die für den Ria Service benötigt werden auch deployen.

    Schau dir mal folgenden Link an:

    http://timheuer.com/blog/archive/2009/12/10/tips-to-deploy-ria-services-troubleshoot.aspx

     

    Dienstag, 28. Juni 2011 09:04
    Beantworter
  • Ich habe vorher in den Eigenschaften sämtlicher Verweise Lokale Kopie auf TRUE gesetzt.
    So wie ich das verstanden hatte, müssten diese nun automatisch Teil der XAP sein, richtig?
    Dienstag, 28. Juni 2011 09:11
  • Für den Service müssen die Dlls auf dem Server liegen. Die Dateien im xap werden auf den Client runtergeladen.
    Du musst also die Dlls manuel auf den Server kopieren, wenn du nicht das Publish von Visual Studio benutzt.

     

    Dienstag, 28. Juni 2011 09:29
    Beantworter
  • Das Publish vom VisualStudio scheint nicht zu funktionieren.
    Reicht es aus, wenn ich den "bin" Ordner des WebProjektes in das virtuelle Verzeichnis kopiere wo auch die XAP und die HTML Datei liegen?

    Ist der Connection String denn richtig? Also der Weg über SQLServer Authentifikation, auch wenn das virtuelle Verzeichnis im IIS Windows Authentifikation nutzt?

    Dienstag, 28. Juni 2011 09:45
  • >>Das Publish vom VisualStudio scheint nicht zu funktionieren.
    >>Reicht es aus, wenn ich den "bin" Ordner des WebProjektes in das virtuelle Verzeichnis kopiere wo auch die XAP und die HTML Datei liegen?
    Ja das sollte ausreichen.
    Web.config musst du natürlich auch kopieren, sonst funktioniert der Service auch nicht!

    >>Ist der Connection String denn richtig?
    Das kann ich dir nicht sagen... Ich weiß ja nicht, ob die Webserver in einem Netzwerk sind?

    >>Also der Weg über SQLServer Authentifikation, auch wenn das virtuelle Verzeichnis im IIS Windows Authentifikation nutzt?
    Das ist möglich, da die Anmeldung an den DB Server unabhängig von der IIS Authentifizierung sein kann.

    Dienstag, 28. Juni 2011 10:41
    Beantworter
  • Leider immer noch keine Veränderung. Laut Fiddler immernoch Error 401 und 403.

    Ich habe jetzt den bin-Ordner, die XAP, die Html und die web.config in einem virtuellen Verzeichnisordner stehen.

    Bezüglich der Webserver, ja diese sind in einem Netzwerk (Intranet), der ConnectionString müsste meiner Meinung nach auch richtig sein.

    Langsam verzweifle ich wirklich an diesem Deployment....

    Dienstag, 28. Juni 2011 10:51
  • Publish vom Visual Studio funktioniert bei mir problemlos. Ich mache es aber aber 2-stufig: publish lokal und dann ftp. Da behalte ich wenigstens den Überblick.
     
    Beim publish werden die xap und ggf. die zusätzlichen zip-Dateien (wenn reduce xap size gesetzt ist) in das in der Web-Anwendung vorgesehene Verzeichnis kopiert (üblicherweise ClientBin). Problematisch sein kann ein Schreibschutz, der beispielsweise beim Check-In in die Quellcodeverwaltung gesetzt wird. Das sollte im Pre- oder Post-Build des Silverlight-Projektes eine entsprechende Anweisung eingefügt werden.
     
    Beim ftp ist das Zielverzeichnis zu nutzen, was später auch vom virtuellen Pfad beim Zugriff auf den IIS genutzt wird.
     
    Beim ConnectionString ist zu berücksichtigen, unter welchem Konto der WebService läuft und mit welchem Konto dann letztendlich auf den SQL Server zugegriffen wird. In Deinem Beispiel greifst Du ohne Nutzerauthentifizierung mit vorgegebenem SQL Server Konto zu (LeitnivellementEntities). Wenn das bei Dir lokal funktioniert, hat entweder der WebServer keine Verbindung zum SQL Server oder die Verbindung wird aus irgendeinem Grund blockiert (firewall, kein TCP im SQL Server zulässig usw.). In solchen Fällen schreibe ich mir eine Testmethode, die schrittweise den Webservice testen lässt, z.B. zuerst nur Rückgabe einer Serverzeit, dann erfolgreiches Open der Connection zum Datenbankserver und zuletzt den einen Lesezugriff zum konkreten Catalog.
     
    --
    Viele Grüße
    Peter
    Dienstag, 28. Juni 2011 10:56
  • Danke erstmal für die vielen Antworten!

    Das Publish von VS scheint nicht zu funktionieren, weil auf dem WebServer der Remote-Agent-Dienst nicht installiert ist. Könnt ihr mir sagen wo ich den für den IIS6 downloaden kann?

    Was genau meinst du mit 2-stufig? Wieso lokal und ftp?

    Eine Testmethode schreiben werd ich glaub ich nich so gut hinbekommen. ;) Bin ehrlich gesagt in dem ganzen Kram nicht ganz so versiert, wie die ein oder andere Frage vielleicht schon gezeigt hat. Gibt es andere Möglichkeiten den Zugriff des WebServers auf den SQL Server zu testen?

    Dienstag, 28. Juni 2011 11:11
  • Mit 2-stufig meine ich, dass ich publish erst einmal in das lokale Filesystem ausführe. Da wird mir alles zusammengestellt, was ich auf dem Webserver benötige. In einem weiteren Schritt kopiere ich den Inhalt des mit publish gefüllten lokalen Verzeichnisses in den Webserver. Dafür nutze ich ftp. Wenn Du anders in den Webserver kopieren kannst, dann kannst Du das natürlich auch ohne ftp machen. Üblicherweise stellen die Provider für das Webhosting aber einen ftp-Zugang bereit, über den man auf die Verzeichnisse zugreifen kann, die vom IIS über die virtuellen Pfade genutzt werden.
     
    Eine Methode im Webservice, mit der Du den Zugang zum Webserver und weiter zum Datenbankserver prüfen kannst, solltest Du schon schreiben.  Ich kann mir nicht vorstellen, wie man anders den gesamten Zugriffsweg einfach überprüfen kann. Eine solche Methode ist in wenigen Minuten geschrieben und sollte auch für einen Anfänger nicht allzu schwer sein.
     
    --
    Viele Grüße
    Peter
    Dienstag, 28. Juni 2011 11:40
  • Ok, dann werd ich mich erstmal daran versuchen.

    Wo finde ich denn den Remote-Agent damit ich diesen auf dem WebServer installieren und anschließend auch Publish über VS2010 ausführen kann?

    Dienstag, 28. Juni 2011 12:11
  • Müssen die RIA Services auf dem WebServer installiert sein, damit das ganze läuft?
    Außerdem wurde teilweise als Voraussetzung die Ausführung folgender Anwendungen genannt:

    C:\Windows\Microsoft.Net\Framework\V3.0\Windows Communication Foundation\ServiceModelReg.exe –i

    C:\Windows\Microsoft.Net\Framework\V4.0.30319\ aspnet_regsql.exe (only if you are not using SQLExpress on app server for aspnet auth database)

    C:\Windows\Microsoft.Net\Framework\V4.0.30319\aspnet_regsql.exe –E –S MyDatabaseServer –A all –d aspnetdb (only if you are not using SQLExpress on app server for aspnet auth database)

    C:\Windows\Microsoft.Net\Framework\V4.0.30319\aspnet_regiis.exe (aspnet_regiis.exe -i)

    Ist das soweit alles richtig?

    Dienstag, 28. Juni 2011 12:37
  • Wenn Du die RIA Services nutzen willst, dann benötigst Du die Bibliotheken dazu (System.ServiceModel.DomainServices....). Die Bibliotheken befinden sich im SDK. Dieses kannst Du auf dem Server im GAC installieren oder Du gibst die Bibliotheken im bin-Verzeichnis mit.
     
    aspnet_regsql.exe benötigst Du, wenn Du zusätzlich die Datenbank für die Authentifizierung (Membershipprovider, Roleprovider) nutzen willst.
     
    aspnet_regiis.exe –i benötigst Du üblicherweise nur einmalig, um im IIS auch ASP.Net einzurichten.
     
    --
    Viele Grüße
    Peter
    Mittwoch, 29. Juni 2011 01:17
  • Ich hab jetzt erstmal ein Publish ins lokale Dateisystem durchgeführt. Anschließend hab ich all diese Datein in mein virutelles Verzeichnis kopiert.
    Leider funktioniert immer noch nichts. Laut Fiddler inzwischen Error 500.
    Ist es richtig, dass in der HTML Datei im object-Tag als Source die XAP im ClientBin Ordner angegeben wird?

    Mittwoch, 29. Juni 2011 07:17
  • Du solltest erst einmal systematisch herangehen.
     
    1. Kann eine html-Seite angezeigt werden?
    2. Kann eine aspx-Seite angezeigt werden?
    3. Wird eine einfache Silverlight-Anwendung geladen und ausgeführt?
     
    Im Object-Tag steht der Pfad und der Name der xap-Datei der Silverlihgt Anwendung. Standardmäßig wird der Pfad auf ClientBin gesetzt.
     
    --
    Viele Grüße
    Peter
    Mittwoch, 29. Juni 2011 07:34
  • Hallo Ouagadougou_Joe,

    das Problem hatte ich diese Woche auch. Wenn du in den Windows Event Logs nachschaust, wirst du wahrscheinlich folgenden Fehler finden "WebHost failed to process a request." und da drunter, dass der Endpunkt zum Service ... nicht gefunden wurde.

    Hast du die RiaServices installiert oder versucht?

    Ich geh mal davon aus, dass du es versucht hast. Du bekommst denn nämlich eine Meldung, dass du Visual Studio und Co installieren musst. Ist auf einem Server jetz nicht so sinnvoll und praktisch.

    Es gibt aber einen Modus, um die RiaServices auf einem Server zu installieren.

    msiexec /i RiaServices.msi SERVER=TRUE

    So sollten sich die Services einfach installieren lassen.

    Soweit kannst du es ja mal ausprobieren, ob das schon bei dir reicht.

    Gruß


    Don't copy, adopt.
    Mittwoch, 29. Juni 2011 08:37
  • @SaschaKupper: So wie ich das verstanden habe, müssen die RIA Services ja nicht zwangsläufig installiert sein, solange die entsprechenden DLLs teil des veröffentlichten BIN Ordners sind.

    @PeterFleischer:

    Ich kann auf die html "TestPage" Datei der Anwendung zugreifen.
    Versuche ich die TestPage.aspx aufzurufen erscheint folgende Meldung:

    Server Application Unavailable

    The web application you are attempting to access on this web server is currently unavailable.  Please hit the "Refresh" button in your web browser to retry your request.

    Mittwoch, 29. Juni 2011 14:20
  • Hast du mal in die Event Logs vom Server reingeschaut?

    Laufen sonst noch ASP.NET Sites auf dem Server?

    Gruß

    Sascha


    Don't copy, adopt.
    Mittwoch, 29. Juni 2011 14:48
  • Ich habe es gerade mal ausprobiert und ohne installierte RIA Services auf dem Webserver scheint es Probleme zu geben. Welche das sind, muss ich noch ergründen. Ohne installierte RIA Services nur mit den dll im bin Ordner wird bei mir zwar kein Fehler angezeigt, es kommen aber auch keine Daten an.
     
    Wenn Deine aspx Seite den Fehler “Service Application unavailable” anzeigt, kann es auch sein dass der virtuelle Pfad auf einen physischen Ordner zeigt, der keine Scripte zulässt.
     
    --
    Viele Grüße
    Peter
    Mittwoch, 29. Juni 2011 21:23
  • Es funktioniert! Ich musste noch verschiedene Veränderungen vornehmen bis die ASPX Seite geladen wurde. Jetzt funktioniert alles und ich kann auch auf die Daten zugreifen!

    Vielen Dank, ihr habt mir wirklich sehr weitergeholfen! Danke!

    Donnerstag, 30. Juni 2011 11:28