2009-02-04 165 views
4

我通過Silverlight訪問SharePoint Web服務時遇到問題。通過Silverlight訪問SharePoint Web服務

嘗試向URI 'http://sample:8000/_vti_bin/Authentication.asmx'發出錯誤。 這可能是由於嘗試以 以跨域方式訪問服務 而沒有適當的跨域策略 或者是不適合SOAP服務的 策略。您可能需要 聯繫 服務的所有者以發佈跨域 策略文件,並確保它允許 發送與SOAP相關的HTTP標頭。 請參閱 的內部例外更多詳情。

一些問題:

  1. 如何正確部署了SharePoint設計clientaccesspolicy.xml?只需在設計師中打開網站,添加文件然後發佈?
  2. clientaccesspolicy.xml應該部署的站點使用表單身份驗證。我無法使用Sharepoint Designer在那裏發佈。因此,我爲此網站創建了新的區域,該區域使用Windows身份驗證並在那裏發佈了clientaccesspolicy.xml。兩者使用相同的內容數據庫,沒有?
  3. 如果clientaccesspolicy.xml將被髮布,我如何允許匿名訪問此文件?

問候 安東Kalcik

+0

的所有內容我是不是能夠匿名訪問的文件。我所做的是我創建了「啓用Silverlight的WCF服務」,它充當Silverlight應用程序和SharePoint Web服務之間的代理。 – 2009-02-08 20:24:38

回答

1

這裏回答了我的問題1和2:

  1. 在你打開該網站在SharePoint Designer中:文件 - >打開網站 - >在文本字段「網站名稱:」您網站的類型網址。拖動&將clientaccesspolicy.xml拖放到您網站的根目錄中。
  2. 如果你有表單身份驗證,你不需要這一步創建新的區域(但由於某些原因它可能是有用的)。您只需打開Web瀏覽器並鍵入您的網站的URL。然後填寫文本字段(始終使用具有管理員權限的用戶)並選中「自動登錄」。之後,Sharepoint設計人員將此憑據用於指定的URL。

如果你可以幫我解答Nr。 3,或者您有其他解決方案,我如何從Silverlight訪問clientaccesspolicy.xml,發佈它!

+0

而是使用評論功能(我認爲它只在某個級別可用)或使用編輯功能來更新您的帖子。不要在你自己的問題上發表答案,除非這是答案。 – 2009-02-04 13:07:24

+0

第1點和第2點是我的問題的答案。 – 2009-02-04 13:25:42

0
  1. 這很好。
  2. 它應該是,只要你沒有設置一個全新的網站。
  3. 它不應該是一個安全風險。如果您需要通過WindowsAuth對服務進行身份驗證,那麼您應該爲clientaccesspolicy.xml進行身份驗證。
+0

爲什麼允許匿名訪問clientaccesspolicy.xml或crossdomain.xml存在安全風險?亞馬遜也這樣做:http://www.amazon.com/crossdomain.xml。你能否給我提供一個示例,在Silverlight運行時訪問此文件之前,我如何進行身份驗證? – 2009-02-04 13:23:00

+0

第1部分:由於您要刪除部分網站的安全性,因此存在安全風險。如果有人能夠替換該文件,他們可能會造成各種損害。 – 2009-02-04 15:11:22

0

請記住,clientaccesspolicy.xml必須位於域根。在你的例子中,它將不得不從http://sample:8000/clientaccesspolicy.xml。如果您無法通過該URL在瀏覽器中打開它,則Silverlight客戶端也無法找到它。

將文件放在正確位置的最簡單方法是通過FTP或瀏覽器將其複製到那裏。該文件應該可供匿名用戶使用(當然,只讀)。

1

我們處理這個項目的方式是使用HTTP處理程序。我們將clientaccesspolicy.xml文件放入_layouts目錄(通過SharePoint站點共享),使用一個功能(您也可以手動將其複製到該目錄中)。

然後我們將HTTP處理程序添加到web.config處理程序部分。在我們的處理程序,我們檢查,看看是否該請求是/clientaccesspolicy.xml如果是這樣,我們重寫路徑:

if (path.ToLowerInvariant() == "/clientaccesspolicy.xml") 
{ 
    HttpContext.Current.RewritePath("/_layouts/clientaccesspolicy.xml"); 
} 

我不知道這是否會繞過安全,所以可能無法完全解決您的問題。但至少它給了你一個訪問這個文件的方法。

0

我覺得實現的SharePoint的HttpHandler更多realeable方式:返回clientaccesspolicy.xml自己

 public void ProcessRequest(HttpContext context) { 
     if (context.Request.Path.ToLowerInvariant() == "/clientaccesspolicy.xml")   { 
      context.Response.Write(@"<?xml version='1.0' encoding='utf-8' ?><access-policy><cross-domain-access> "+ 
      @"<policy> <allow-from http-request-headers='*'> <domain uri='*' /> </allow-from> <grant-to> "+ 
      @"<resource path='/' include-subpaths='true' /> </grant-to> </policy> "+ 
      @"</cross-domain-access> </access-policy>"); 
     } 
    }