2012-10-19 1 views
0

J'essaie de connecter un service REST WCF .NET Framework 4.0 sur un IIS6 à une base de données SQL Server 2008 R2 avec cette chaîne de connexion:Impossible de se connecter à SQL Server à partir du service WCF mais je peux à partir de Management Studio

<add name="EReportEntities" 
    connectionString="metadata=res://*/EReportModel.csdl|res://*/EReportModel.ssdl|res://*/EReportModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;Server=localhost;Database=ADM;User Id=sa;Password=XXXXXXXX;multipleactiveresultsets=True;App=EntityFramework&quot;" 
    providerName="System.Data.EntityClient" /> 

Mais je ne peux pas. Je reçois:

Event Type: Failure Audit 
Event Source: MSSQLSERVER 
Event Category: (4) 
Event ID: 18456 
Date:  10/19/2012 
Time:  10:47:48 AM 
User:  N/A 
Computer: UNILEVER 
Description: 
Login failed for user 'sa'. [CLIENT: <local machine>] 

For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp. 
Data: 
0000: 18 48 00 00 0e 00 00 00 .H...... 
0008: 09 00 00 00 55 00 4e 00 ....U.N. 
0010: 49 00 4c 00 45 00 56 00 I.L.E.V. 
0018: 45 00 52 00 00 00 07 00 E.R..... 
0020: 00 00 6d 00 61 00 73 00 ..m.a.s. 
0028: 74 00 65 00 72 00 00 00 t.e.r... 

Mais, si j'utilise sa utilisateur pour se connecter à SQL Server Management Studio, je peux me connecter.

Qu'est-ce que je fais mal?

+0

Ceci est une chaîne de connexion pour ** Entity Framework ** - utilisez-vous EF pour parler à SQL Server à partir de votre service WCF? –

+0

Oui, j'utilise Entity Framework. – VansFannel

+0

Et votre base de données est-elle vraiment sur le même serveur que votre IIS? Vous utilisez 'Server = localhost' dans votre chaîne de connexion. –

Répondre

1

Il est à peine surprenant que vos services WCF ne peuvent pas se connecter, étant donné que vos points de chaîne de connexion à localhost.

connectionString="metadata=res://*/EReportModel.csdl|res://*/EReportModel.ssdl|res://*/EReportModel.msl; 
provider=System.Data.SqlClient; 
provider connection string=&quot;Server=localhost; 
Database=ADM; 
. . . 

Ce que je recommande souvent est d'envelopper vos services WCF dans un try..catch, et si les choses tournent mal, ajoutez la chaîne de connexion au message d'erreur, pour vérifier que vos services sont en utilisant la chaîne de connexion droite.

(je l'ai eu des moments où mon web.config CONTENAIT plusieurs chaînes de connexion, mais mon Entity Framework/LINQ to SQL ont décidé d'utiliser le mauvais. Ça va repérer ces cas.)

Par exemple, voici le code que je voudrais utiliser, pour un simple service WCF:

public List<wsCustomer> GetAllCustomers() 
{ 
    NorthwindDataContext dc = null; 
    try 
    { 
     dc = new NorthwindDataContext(); 
     List<wsCustomer> results = new List<wsCustomer>(); 
     foreach (Customer cust in dc.Customers) 
     { 
      results.Add(new wsCustomer() 
      { 
       CustomerID = cust.CustomerID, 
       CompanyName = cust.CompanyName, 
       City = cust.City 
      }); 
     } 
     return results; 
    } 
    catch (Exception ex) 
    { 
     OutgoingWebResponseContext response = WebOperationContext.Current.OutgoingResponse; 
     response.StatusCode = System.Net.HttpStatusCode.InternalServerError; 
     response.StatusDescription = ex.Message.Replace("\r\n", "") + " " + dc.Connection.ConnectionString; 
     return null; 
    } 
} 

en utilisant ce code, si quelque chose va mal, vous pouvez voir l'erreur SQL Server et le serveur/base de données, il a été tenté d'utiliser.

Error message

Plus de détails ici: WCF Deployment and troubleshooting

Questions connexes