我使用的WCF服务存在一个非常具体的问题:
我有一个包含2个下拉列表的ASP.NET页面:
他们都使用模拟作为登录用户转到SQL Server数据库。 这适用于所有客户,除了1个环境。 在尝试从WCF服务调用数据库时,我收到以下异常:
"Login failed for user 'NT AUTHORITY\\ANONYMOUS LOGON'.","StackTrace":"
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)\u000d\u000a
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)\u000d\u000a
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)\u000d\u000a
at System.Data.SqlClient.SqlInternalConnectionTds.CompleteLogin(Boolean enlistOK)\u000d\u000a
at System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, Boolean ignoreSniOpenTimeout, Int64 timerExpire, SqlConnection owningObject)\u000d\u000a
...
似乎由于某种原因,WCF服务使用匿名帐户访问数据库,尽管来自ASP.NET代码的调用仍然按预期工作,并使用预期帐户访问数据库。
连接字符串使用Integrated Security=SSPI
。
它必须是我们缺少的一些特定于环境的配置,但是我无法看到委托和模拟直接从ASP.NET工作的内容。
有谁知道问题可能是什么?
修改 system.servicemodel部分:
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
<bindings>
<webHttpBinding>
<binding name="ServiceWebBindingName">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows"></transport>
</security>
</binding>
</webHttpBinding>
</bindings>
<behaviors>
<endpointBehaviors>
<behavior name="HistoryReportingEndpointBehavior">
<enableWebScript />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="HistoryReportingServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceAuthorization principalPermissionMode="UseAspNetRoles" impersonateCallerForAllOperations="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="HistoryReportingServiceBehavior" name="ServiceLibrary.HistoryReporting">
<endpoint address="" behaviorConfiguration="HistoryReportingEndpointBehavior" binding="webHttpBinding" bindingConfiguration="ServiceWebBindingName" name="HistoryReportingWebEndPoint" contract="ServiceLibrary.IHistoryReporting" />
</service>
</services>
</system.serviceModel>
答案 0 :(得分:0)
您获得的错误可能是因为您的Web应用程序正在使用的IIS应用程序池在没有SQL Server权限的帐户下运行。将应用程序池帐户更改为可以访问SQL Server的帐户,问题应该消失。