使用 SharePoint 2010 中的自訂宣告提供者在人員選擇中選取後名稱消失
英文原文已於 2011 年 6 月 28 日星期二發佈
我最近見證了一個證明相當難以追蹤的問題,因此我想分享這個問題和解決方案。在此例中,一直都在持續開發自訂宣告提供者,並且將它做為 SPTrustedIdentityTokenIssuer 的預設宣告提供者,如這裡所述:https://blogs.technet.com/b/speschka/archive/2010/04/28/how-to-override-the-default-name-resolution-and-claims-provider-in-sharepoint-2010.aspx (可能為英文網頁)。在某些情況下,它似乎可以運作,您可以搜尋一些項目,它會顯示相符項目的清單,您可以選取其中一個,然後按一下 [確定] 按鈕。在某些情況下,一切又運作良好,對話方塊會消失,而且您會看到解析的名稱為主控的類型。此外,您也可以在 FillResolve 方法上設定中斷點並逐步執行它。
不過,在某些情況下,您會看到這種行為:
- 人員選擇對話方塊關閉
- 主控的類型為空白 - 出現 [無](否則為已解決)
- 如果您在 FillResolve 上設定中斷點,它永遠不會命中
- 如果您查看 ULS 記錄檔,將看不到錯誤
在這個案例中,我最後判斷出真正的問題出在於自訂宣告提供者新增了在 SPTrustedIdentityTokenIssuer 中沒有一致的對應。例如,它正在建立宣告,而其宣告類型是 https://schemas.steve.com/foo,但是 SPTrustedIdentityTokenIssuer 的宣告對應清單並沒有 https://schemas.steve.com/foo 的對應 (例如,宣告對應以及建立它們的方法,請參閱 https://blogs.technet.com/b/speschka/archive/2010/02/17/creating-both-an-identity-and-role-claim-for-a-sharepoint-2010-claims-auth-application.aspx (可能為英文網頁))。因此新增 SharePoint 知道不是對應的宣告,會使它在管線中的某個位置讓該宣告消失,並對您呈現空白螢幕,而且沒有任何錯誤訊息。這也就是為什麼需要花這麼多時間來追蹤。
對於此特定問題,我們最後卸除了 SPTrustedIdentityTokenIssuer 並重新建立它,但是為一直從人員撰擇消失的宣告類型新增對應。我們可以再次執行程式碼,而且它們全部都會立即運作,也因此確認了此問題和解決方案。
這是翻譯後的部落格文章。英文原文請參閱 Name Disappears After Selecting in People Picker with Custom Claims Provider in SharePoint 2010