Announcement

Collapse
No announcement yet.

Web Service und SQL Server DB Northwind

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Web Service und SQL Server DB Northwind

    Hi Andreas und alle zusammen,
    ich bin ein „dot.net – Neuling“ (komme aus der Oracle-Ecke) und gerade dabei, die WebService-Beispiele aus dem Heft „dot.net 03.02“ durchzuspielen und habe ein Problem mit dem Beispiel aus dem Artikel „.NET WebServices“, das sich mit dem Zugriff eines WebService auf die SQL Server-Datenbank „Northwind“ beschäftigt.
    Folgender Stand: Ich habe einen WebService mit VB unter VisualStudio .NET erstellt, der auf die „Northwind“-Tabelle „Customers“ zugreifen soll (habe das Objekt „Customers“ aus dem Server-Fenster auf das Frame gezogen – sieht im Code-Fenster auch alles gut aus!), dann eine WebApplication mit C#, die diesen WebService aufruft. Nach dem Start der WebApplication betätige ich den Button, der den WebService aufruft und bekomme folgenden Fehler:

    Eine nicht behandelte Ausnahme des Typs 'System.Web.Services.Protocols.SoapException' ist in system.web.services.dll aufgetreten.

    Zusätzliche Informationen: System.Web.Services.Protocols.SoapException: Der Server konnte die Anforderung nicht verarbeiten. ---> System.Data.SqlClient.SqlException: Fehler bei der Anmeldung für den Benutzer '1-14916-98\ASPNET'.
    at System.Data.SqlClient.SqlConnection.Open()
    at WebService3.Service1.GetCustomers() in c:\inetpub\wwwroot\WebService3\Service1.asmx.vb:li ne 193
    --- Ende der internen Ausnahmestapelüberwachung ---

    Anscheinend „kennt“ mein WebService den SQL Server bzw. die Datenbank „Northwind“ nicht. Muss ich noch irgendwas im IIS machen? Oder irgend etwas zusätzlich installieren?

    Den Connect-String in der Methode „GetCustomers“ des WebService habe ich aber direkt aus dem generierten Code übernommen (mein SQL Server heißt 1-14916-98):

    sConStr =
    "Data Source=1-14916-98; integrated security=SSPI; initial catalog=Northwind"

    Ich habe aber schon alle nur denkbaren Connect-Strings eingegeben, mit allen möglichen und unmöglichen Parameter-Kombinationen – alles ohne Erfolg.

    Hintergrund-Infos:
    Sql Server, WebService und WebApplication laufen alle auf einem PC. Ein „direktes“ Holen der Northwind-Customer-Daten aus der WebApplication (new DataSet, new SqlDataAdapter etc. ) läuft auch. Ich habe auch mit Hilfe des IIS ein neues virtuelles Verzeichnis mit „Northwind“ verknüpft und direkt im Internet-Browser über dieses virtuelle Verzeichnis einen SQL-Befehl auf „Customers“ abgesetzt – funktioniert auch.
    Was habe ich falsch gemacht bzw. vergessen?

    Vielen Dank für Eure Hilfe
    Rolf

  • #2
    Hallo Rolf,<br>
    es sieht so aus, als wäre der Fehler im Webservice zu suchen. Wahrscheinlich gibt es dort ein Problem mit dem Verbindungsaufbau zum SQL Server. Als erstes würde ich daher versuchen den WebService zu debuggen, bzw. auch mal selber in einem Browser zu öffnen.

    Über die Exception steht in der Online-Doku folgendes:<br>
    <i>...die Ausnahme auf dem Server abgefangen und in einer neuen <b>SoapException</b> eingebettet.</i>

    Dieser Fehler kann auch passieren, wenn man nachträglich die Parameter der WebService-Methoden ändert

    Comment


    • #3
      Hallo Rolf,

      &gt;..integrated security=SSPI...

      da der Verbindungsstring keinen Benutzernamen (und kein Passwort) definiert, muss ASP.NET unter dem eigenen Benutzerkonto <i>ASPNET</i> auf den SQL Server zugreifen (Windows-Authentifizierung). Dies ist allerdings nur dann erfolgreich, wenn der Benutzer ASPNET auch als Benutzer beim SQL Server eingerichtet wird und Zugriffsrechte auf die Datenbank Northwind erhält.

      &gt;..Fehler bei der Anmeldung für den Benutzer '1-14916-98\ASPNET'. at System.Data.SqlClient.SqlConnection.Open() ..

      Diese Fehlermeldung zeigt, dass für den MS SQL Server der Benutzer <i>ASPNET</i> als Datenbankbenutzer unbekannt ist, so dass SqlConnection keine Verbindung zur Datenbank aufbauen kann.

      In meinem Beispielen greife ich immer als Benutzer "sa" (vordefinierter Benutzername mit allen Rechten am SQL Server) auf den MS SQL Server zu und gehe somit diesem Problem von vornherein aus dem Weg (der MS SQL Server wird dazu so konfiguriert, dass er sowohl die klassische Anmweldung als auch die automatische Windows-Authentifizierung unterstützt).

      Alternativ könnte man auch ASP.NET unter einem Benutzerkonto laufen lassen, das bereits Zugriffsrechte auf den SQL Server hat (siehe Eintrag <b>username</b> in <i>machine.config</i> im Installationsverzeichnis von .NET)

      Comment


      • #4
        Hi Andreas,
        danke für die Tipps, mit dem Standard-User „sa“ hat alles geklappt, auch mit anderen Usern, die Zugriffsrechte auf „Northwind“ haben.
        Ich habe nur noch ein kleines Verständnisproblem mit ASP.NET:
        Wie lasse ich ASP.NET unter anderem Benutzerkonto laufen?
        Meine Einträge in „machine.config“ blieben stets wirkungslos, oder muss ich vorher den SQL Server anhalten (welcher username in machine.config ist es eigentlich? Ich habe den im processModel-Tag genommen, war hoffentlich richtig?)
        Oder gibt es im IIS eine Möglichkeit, ASP.NET neu zu konfigurieren, die ich bisher noch nicht gefunden habe?
        Vielen Dank für die Hilfe
        Rol

        Comment


        • #5
          Hallo Rolf,

          die Flexiblität von ASP.NET ist zwar generell eine gute Sache, erschwert im Gegenzug jedoch am Anfang den Überblick. Microsoft hat daher in mehreren Knowlegde Base-Arktikeln alle verfügbaren Optionen zusammengefasst: <br>
          a) Q317012 INFO: Process and Request Identity in ASP.NET <br>
          b) Q315736 HOW TO: Secure an ASP.NET Application by Using Windows Security <br>
          c) Q316748: HOW TO: Authenticate Against the Active Directory by Using Forms Authentication and Visual C# .NET <br>
          d) Q315158: BUG: ASP.NET Does Not Work with the Default ASPNET Account on a Domain Controller <br>
          e) Q3177955: BUG: "Failed to Start Monitoring Directory Changes" When You Browse to an ASP.NET Page <br>

          Die Kurzzusammenfassung lautet wie folgt:

          1. Die Datei <b>machine.config</b> im Verzeichnis <i>\WINNT\Microsoft.NET\Framework\v1.0.3705\CONFIG </i> (falls Windows 2000 Server verwendet wird) editieren.

          2. Im Abschnitt <b>processModel</b> werden die Einträge <b>userName</b> und <b>password</b> auf das bereits vorhandene Konto gesetzt

          3. Server neu booten.

          P.S. Das Ändern von ASPNET ist "gefährlich", wenn ein Konto verwendet wird, dass zu viele Rechte hat. Man muss also dafür sorgen, dass das über processModel neugeordnete Benutzerkonto nicht zu viele Rechte hat, wenn der Server von außen erreichbar ist

          Comment

          Working...
          X