WCF 托管在 IIS 中,连接到具有集成安全性的数据库时出现问题
Posted
技术标签:
【中文标题】WCF 托管在 IIS 中,连接到具有集成安全性的数据库时出现问题【英文标题】:WCF hosted in IIS, Problem connecting to database with integrated security 【发布时间】:2010-09-22 16:28:36 【问题描述】:我的开发 XP 机器上有一个托管在 IIS 5.1 中的 WCF 服务。该服务无法连接到集成安全性 = true 的 sql server 数据库。当托管在控制台应用程序中时,相同的服务可以正常工作。我已取消选中匿名访问并检查了 IIS 中的集成 Windows 身份验证
这些是我在 Web.Config 中的设置
<connectionStrings>
<add name="CADISEntities" connectionString="metadata=res://*/UDI.CADISEntities.csdl|res://*/UDI.CADISEntities.ssdl|res://*/UDI.CADISEntities.msl;provider=System.Data.SqlClient;provider connection string="Data Source=DBSQLP404;Initial Catalog=CadisCustom;Integrated Security=True;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" />
</connectionStrings>
我尝试将集成安全更改为 SSPI 和可信连接 = 是,但没有运气。下面是配置设置。
<service behaviorConfiguration="CADISBehaviour" name="GlobalInvestors.FIPA.BLL.UDI.CADISSecurities">
<endpoint binding="basicHttpBinding" bindingConfiguration="CADISBinding"
contract="GlobalInvestors.FIPA.BLL.UDI.ICADISSecurities" />
</service>
<basicHttpBinding>
<binding name="CADISBinding" closeTimeout="01:30:00" openTimeout="01:30:00"
receiveTimeout="01:30:00" sendTimeout="01:30:00" maxBufferSize="65536000"
maxBufferPoolSize="52428800" maxReceivedMessageSize="65536000">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Ntlm" proxyCredentialType="Ntlm" />
</security>
</binding>
</basicHttpBinding>
在客户端
<endpoint address="http://ainaost4.amerus.corp.tld/FIPA/BLLHost/CADIS.svc"
behaviorConfiguration="Behavior" binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_ICADISSecurities" contract="CADISEntities.ICADISSecurities"
name="BasicHttpBinding_ICADISSecurities">
<!--<identity>
<userPrincipalName value="AINAOST4\ASPNET" />
</identity>-->
</endpoint>
<binding name="BasicHttpBinding_ICADISSecurities" closeTimeout="01:30:00"
openTimeout="01:30:00" receiveTimeout="01:30:00" sendTimeout="01:30:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="655360000" maxBufferPoolSize="655360000" maxReceivedMessageSize="655360000"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Ntlm" proxyCredentialType="Ntlm"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
没有在代码中设置模拟,我得到“底层提供程序在打开时失败”在代码中设置模拟,我得到“无法初始化 SSPI”
[OperationBehavior(Impersonation = ImpersonationOption.Required)]
尝试谷歌搜索,发现无法在 IIS 5.1 中设置应用程序池。
任何解决此问题的建议将不胜感激。
【问题讨论】:
通过在连接字符串中提供完全限定的 sql 服务器名称来解决问题 【参考方案1】:通过在连接字符串中提供完全限定的 sql 服务器名称来解决问题
【讨论】:
以上是关于WCF 托管在 IIS 中,连接到具有集成安全性的数据库时出现问题的主要内容,如果未能解决你的问题,请参考以下文章
IIS 托管具有 SSL 安全性的 WCF -“HTTP 请求被客户端身份验证方案‘匿名’禁止”错误