【问题标题】:WCF/Entity Framework with External SQL Server DB Does Not Work when Deployed to IIS部署到 IIS 时,带有外部 SQL Server DB 的 WCF/实体框架不起作用
【发布时间】:2011-12-09 15:59:44
【问题描述】:

我有一个简单的 WCF 项目,它使用实体框架来访问 AdventureWorks 数据库。它实际上出自一本书Windows Communication Foundation 4: Step by Step.

问题在于 SQL Server 数据库不是本地 SQL Server Express 实例,而是位于名为 win01s305 的外部计算机上的完整 SQL Server 2008 R2 实例。我通过Generate from Database 从外部数据库创建了一个数据模型。在我将 WCF 服务发布到 IIS 之前,数据访问完全可以与内置的 ASP.NET Web 服务器(Cassini?)一起工作。然后远程 SQL 服务器计算机上的凭据/帐户不同,数据访问停止工作。

如果你遇到麻烦,本书会指定一个脚本:

USE [AdventureWorks]
GO
CREATE USER [IIS APPPOOL\DefaultAppPool] FOR LOGIN [IIS APPPOOL\DefaultAppPool]
GO
EXEC sp_addrolemember N'db_owner', [IIS APPPOOL\DefaultAppPool]
GO
GO
CREATE USER [IIS APPPOOL\ASP.NET v4.0] FOR LOGIN [IIS APPPOOL\ASP.NET v4.0]
GO
EXEC sp_addrolemember N'db_owner', [IIS APPPOOL\ASP.NET v4.0]
GO

问题是远程 SQL Server 计算机上不存在这些帐户。这台机器上没有 IIS 或 .NET Framework,只有 SQL Server。我该怎么做?

【问题讨论】:

    标签: sql-server wcf entity-framework


    【解决方案1】:

    您必须在域帐户下运行您的应用程序池并在您的数据库中授予该用户权限,或者在 sql 服务器上打开混合模式身份验证后,创建一个经过 SQL 身份验证的用户并将其名称和密码放入您的连接中字符串。

    USE [master]
    GO
    CREATE LOGIN [MYDOMAIN\MyAccount] FROM WINDOWS WITH DEFAULT_DATABASE=[master]
    GO
    USE [MyDatabase]
    GO
    CREATE USER [MyDomain\MyAccount] FOR LOGIN [MyDomain\MyAccount]
    GO
    USE [MyDatabase]
    GO
    EXEC sp_addrolemember N'db_datareader', N'MyDomain\MyAccount'
    GO
    USE [MyDatabase]
    GO
    EXEC sp_addrolemember N'db_datawriter', N'MyDomain\MyAccount'
    GO
    

    【讨论】:

    • 你有在 SQL Server 中赋予域用户权限的脚本示例吗?
    • 您可以在 SQL Management Studio GUI 中轻松完成。如果您愿意,也可以从那里生成脚本。我还为您编辑了答案。
    【解决方案2】:

    通常我会为您的应用程序池使用域帐户或为该应用程序使用 SQL 登录名。这一切都取决于您如何在活动目录中构建您的服务器(和退出)。我更喜欢后者,FWIW。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-10
      • 2014-01-30
      • 2013-06-07
      • 2019-01-31
      • 1970-01-01
      • 2019-06-24
      相关资源
      最近更新 更多