2012-03-13 121 views
0

非常沮喪與所有這一切,希望有人可以協助。clientaccesspolicy.xml突然停止工作(WCF/Silverlight)

我有一個Silverlight應用程序和WCF一起工作,一年沒有問題。爲了讓他們工作,我最初有些痛苦,但終於在幫助下完成了它。所有的痛苦都來自配置/安全性,401的,跨域的地獄等。

我有一切設置的方式是,我有一個WCF服務駐留在它自己的應用程序/目錄,並運行在它自己的應用程序池。

在同一個Web服務器(IIS7)上,我有另一個指向上述服務的Silverlight應用程序的應用程序/目錄。

服務器名稱(本練習)是WEBSERVER1。我們爲它創建了一個名爲WEB1的CNAME。在過去,如果用戶去http://WEB1/MyApp/http://WEBSERVER1/MyApp/它會起作用。突然昨天它開始表現不好。普通用戶開始獲得Windows挑戰/響應提示(即使他們輸入信息他們將得到401錯誤)。

我的WCF服務在啓用匿名訪問的站點中運行(並且這一直工作)。 我的Silverlight應用程序在集成了Windows的站點中運行(並且這一直工作),因爲我們在連接時捕獲了Windows用戶名。

爲了記錄,我昨天創建了一個新的應用程序池,其中運行了ASP.NET應用程序。這似乎工作正常,但有一個機會創建這個新的應用程序池和應用程序/目錄已導致改變。

我有一個clientaccesspolicy.xml在我的wwwroot文件夾,以及上述兩個應用程序(以防萬一)的每個文件夾。我曾試圖通過Negotiate作爲提供者來推廣NTLM(因爲這對另一個服務器上的另一個問題起作用)。

在嘗試了一些更改後,我甚至無法讓我每次調用它時表現得都一樣。有時它會提示我輸入憑據。其他時候,它會工作,但後來說它無法與「未找到」WCF服務連接。其他時候,它實際上可以正常工作,但前提是我使用的是實際的服務器名稱而不是CNAME。在使用CNAME時,即使我在每個目錄根目錄中都有跨域xml文件,我仍會得到跨域錯誤。

這是一場噩夢,並且通過比較使得高級算法分析看起來有趣且簡單。微軟是否意識到他們如何組合這些(IIS7/WCF/Silverlight/providers/permissions /神祕或缺失的錯誤消息)才能起作用?

+0

你可以運行Fiddler並在這裏添加日誌,以便我們可以看到發生了什麼?下載http://www.fiddler2.com。 – Bryant 2012-03-13 18:05:23

+0

我實際上正在運行Fiddler2,會嘗試用日誌進行更新 – enforge 2012-03-13 18:09:53

+0

不知道如何在這裏添加日誌,但有一行查找根並獲得200(成功)。下一行查找/app/Silverlight.js,它返回一個304(緩存?)。下一行是/clientaccesspolicy.xml中的401錯誤(即使該文件存在),並且下一行是/crossdomain.xml文件的401行。 – enforge 2012-03-13 18:44:53

回答

0

我發現了一個似乎正在工作的解決方案。

在這種情況下,我必須將默認網站(託管clientaccesspolicy.xml文件)的身份驗證模式從匿名訪問更改爲Windows集成。我不明白爲什麼這個工作了一年左右,然後停下來,但似乎已經解決了它。

昨天我部署了一個新的應用程序,它是一個標準的ASP.NET Web應用程序,我把它放在它自己的應用程序目錄和它自己的應用程序池中,以確保它不會導致這類問題。我甚至不確定它是否確實如此。

我解決這個問題的方法是試圖從我的電腦導航到實際的http://servername/clientaccesspolicy.xml文件,那給了我一個401錯誤。我從匿名切換到集成在該默認網站上的窗口(除了該XML文件外沒有任何內容)並解決了權限問題。然後我不得不允許實際的AD組讀取該文件夾(如果他們沒有得到user/pw提示符並且無法通過)。