在 Visual Studio 專案中指定非 Kerberos 驗證
未來的 Microsoft SQL Server 版本將移除這項功能。請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。
使用 Visual Studio 2005 時,有些驗證機制需要額外的設定步驟。例如,Kerberos 驗證需要服務主要名稱 (SPN) 註冊和其他相關步驟。如需詳細資訊,請參閱<使用 Http.sys 註冊 Kerberos 服務主要名稱>。
設定為使用整合式驗證的 HTTP 端點可以利用 Kerberos 或 NTLM 做為驗證配置來回應用戶端。伺服器所選取和使用的實際配置 (Kerberos 或 NTLM),取決於要求驗證時用戶端所使用的配置。如需詳細資訊,請參閱<端點驗證類型>。
此主題提供如何修改 Visual Studio 2005 專案的詳細資料,當選取整合式驗證作為伺服器上的驗證類型時,Web 服務用戶端應用程式會要求非 Kerberos 驗證配置。
一般而言,當您以 Visual Studio 2005 撰寫用戶端應用程式時,必須設定適合 SQL Server 實作中原生 XML Web Service 使用的認證。假設您是使用整合式驗證,就可以在程式碼中使用類似下列的項目:
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;
雖然使用以上程式碼範例,可以在 INTEGRATED 結束點上強制 Visual Studio 2005 使用 NTLM 以取代 Kerberos,但因為 SPN 問題而無法使用 Kerberos 時,建議您建立結束點並設定 AUTHENICATION=NTLM,用這個方法使用 NTLM。
開發環境的其他組態需求
上節中所提及的程式碼修改,可允許用戶端應用程式指定和使用 Kerberos 以外的驗證配置,但在開發環境中執行和測試時,還需要進行其他工作才能支援您的應用程式。
請注意,依預設,Visual Studio 中的加入 Web 參考功能,在嘗試擷取 Web 服務的 WSDL 回應時,一定會使用 Kerberos。若要避免這個狀況,您可以執行下列因應步驟:
正確設定開發環境的 Kerberos 驗證。這包含以單一使用者身分註冊您自己的 Kerberos SPN,或開發人員網域群組的 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 )
或者,您可以依照下列步驟執行:
透過其他機制 (例如使用 Internet Explorer 並將 WSDL 回應儲存至檔案中) 擷取 WSDL 回應。
在 Visual Studio 中加入來自檔案的 Web 參考,以取代 URL,例如 http://MyServer/sql_endpoint?wsdl。