0

我正在尝试使用以下连接字符串将 IIS6 上的 .NET Framework 4.0 WCF REST 服务连接到 SQL Server 2008 R2 数据库:

<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" />

但我不能。我得到:

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...

但是,如果我使用 sa 用户登录 SQL Server Management Studio,我可以登录。

我究竟做错了什么?

4

2 回答 2

1

鉴于您的连接字符串指向localhost.

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

我经常建议将您的 WCF 服务包装在一个try..catch.,如果出现问题,将连接字符串附加到错误消息中,以检查您的服务是否使用了正确的连接字符串。

(我曾经web.config包含多个连接字符串,但我的实体框架/LINQ to SQL 决定使用错误的连接字符串。这将查明这种情况。)

例如,对于一个简单的 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;
    }
}

使用此代码,如果出现问题,您可以看到 SQL Server 错误以及它尝试使用的服务器/数据库。

错误信息

更多详细信息: WCF 部署和故障排除

于 2016-04-28T07:36:12.153 回答
0

尝试在http://www.connectionstrings.com/sql-server-2008使用其他连接字符串变体

于 2012-10-19T09:13:11.903 回答