0

我一直在开发一个 WCF 服务,它调用 Web 服务,然后调用 sql 服务器。在同一解决方案中进行测试时,一切正常。现在,我已经在 IIS 上托管了 WCF 服务,并且正在尝试从 asp.net Web 应用程序进行服务调用。IIS 服务目前托管在我的本地计算机上。在 SQL Server Management Studio 中连接时,我使用 Windows 身份验证。当我调用 Web 服务时,在调用 SQL 时出现以下错误,因此我假设它不喜欢凭据:

Login failed for user 'MYDOMAIN\MYMACHINENAME$'.

这是我调用 Web 服务的代码。如您所见,我已尝试明确传递我的凭据:

var providerService = new ProviderServices.ProviderService();
providerService.Credentials = new NetworkCredential("myusername", "mypassword", "mydomain");
providerService.UseDefaultCredentials = false;

providerService.CheckProviderExclusion(PPLUser.CurrentProgram.ProgramLabel, ps.No, ps.ProviderName, ps.SocialSecurityNo);

这是异常的内部文本:

用户“PCGUS\BON-0010882$”登录失败。在 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException 异常,布尔 breakConnection,Action'1 wrapCloseInAction)在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj,布尔 callerHasConnectionLock,布尔 asyncClose)在 System.Data.SqlClient.TdsParser System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) at System.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean & dataReady) at System。 System.Data 中的 Data.SqlClient.SqlInternalConnectionTds.CompleteLogin(Boolean enlistOK)。

如何配置服务以验证我的 sql server 连接?

4

2 回答 2

1

这里有几个层,每个层都可以选择它发送到下一层的身份验证。

您的 WCF 服务正在使用 Windows 凭据调用 Web 服务。假设这有效:

  • 调用来自 IIS,取决于这些凭据的使用或丢失的 IIS 设置。例如,如果 IIS 是匿名的,那么它只会丢失。
  • 然后它访问应用程序池,其中 web.config 中的设置确定是否使用凭据。
  • 然后它访问数据库,其中连接字符串确定使用哪些凭据。

还有一个“双跳”问题,默认情况下服务无法传递在使用之前重新传递的凭据。不确定这是否会影响您。

于 2013-09-19T18:08:11.587 回答
0

我可能迟到了,但我一直在寻找相同的解决方案。然而,我找到了自己。您可以尝试: 1. 运行 inetmgr。2. 转到应用程序池 3. 搜索您的应用程序指向的应用程序池。4. 检查身份列 5. 您可以通过右键单击属性来修改身份列值。6. 确保身份用户应具有 Windows 身份验证。

于 2016-08-16T04:31:05.117 回答