使用 Visual Studio 2005 时,某些身份验证机制需要设置附加步骤。例如,Kerberos 身份验证需要进行服务主体名称 (SPN) 注册和其他相关步骤。有关详细信息,请参阅使用 Http.sys 注册 Kerberos 服务主体名称。
对于 SQL Server 2005,配置为使用集成身份验证的 HTTP 端点可响应使用 Kerberos 或 NTLM 作为身份验证方案的客户端。服务器实际选择和使用的方案(Kerberos 或 NTLM)取决于客户端在请求身份验证时使用的方案。有关详细信息,请参阅端点身份验证类型。
本主题介绍了有关如何修改 Visual Studio 2005 项目的详细信息,以便在服务器上选择集成身份验证作为身份验证类型时,Web 服务客户端应用程序会请求 Kerberos 以外的身份验证方案。
通常,在 Visual Studio 2005 中编写客户端应用程序时,必须设置凭据,以便在 SQL Server 2005 中实现时可用于本机 XML Web 服务。假设使用的是集成身份验证,则可以使用类似以下示例的代码:
myServer.sql_endpoint proxy = new myServer.sql_endpoint();
proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
但是,如果没有在其他计算机上正确设置 Kerberos 身份验证(SPN 注册等),Visual Studio 2005 将始终尝试使用 Kerberos 作为身份验证方案,除非选择了 NTLM、BASIC 或 DIGEST 作为身份验证类型,从而在 HTTP 端点上 (sql_endpoint) 明确禁止使用 Kerberos 作为身份验证方案。您可能需要指定 Visual Studio 2005 改为使用其他支持的方案,例如 NTLM。
以下代码显示了如何覆盖 Visual Studio 2005 使用的身份验证方案,并使客户端应用程序请求改为使用 NTLM 作为身份验证机制:
mattm1.sql_endpoint proxy = new mattm1.sql_endpoint();
System.Net.CredentialCache myCreds = new System.Net.CredentialCache();
myCreds.Add(new Uri(proxy.Url), "NTLM", System.Net.CredentialCache.DefaultCredentials.GetCredential(new Uri(proxy.Url), "NTLM"));
proxy.Credentials = myCreds;
尽管可以通过使用上述代码示例来强制 Visual Studio 2005 在 INTEGRATED 端点上使用 NTLM 而不使用 Kerberos,但建议当 Kerberos 由于 SPN 问题而无法使用时,通过创建配置为 AUTHENICATION=NTLM 的端点这种方式来使用 NTLM。
对开发环境的其他配置要求
前一部分中提到的对代码进行的修改将允许客户端应用程序指定和使用除 Kerberos 以外的身份验证方案,但是当在开发环境中运行和测试应用程序时,需要执行其他一些任务来支持该应用程序。
请注意,默认情况下,Visual Studio 中的添加 Web 引用功能在尝试通过 Web 服务检索 WSDL 响应时将始终使用 Kerberos。若要避免此情况,可以执行下列步骤来解决:
为开发环境正确设置 Kerberos 身份验证。这涉及到为您一个用户或者为开发人员域组(如果可以)注册 Kerberos SPN。有关详细信息,请参阅使用 Http.sys 注册 Kerberos 服务主体名称。
临时在端点上禁用 Kerberos。通过使用以下
ALTER ENDPOINT
过程切换至DIGEST
模式,可以正确获取 WSDL 响应。ALTER ENDPOINT endPointName AS HTTP ( AUTHENTICATION = DIGEST )
在 Visual Studio 2005 项目中添加 Web 引用。
将端点转换回
INTEGRATED
模式,如下所示:ALTER ENDPOINT endPointName AS HTTP ( AUTHENTICATION = INTEGRATED )
或者,也可以执行以下步骤:
- 通过其他机制检索 WSDL 响应,例如使用 Internet Explorer 并将 WSDL 响应保存到文件中。
- 在 Visual Studio 中从文件中而不是作为 URL 来添加 Web 引用,例如:
请参阅
参考
其他资源
CREATE ENDPOINT (Transact-SQL)
ALTER ENDPOINT (Transact-SQL)