WCF RIA Services 部署在IIS6很簡單,但是也會出現一些問題
我們的應用是Silverlight 4 Business Application,應用了WCF RIA Service, .net framework 4 環境下,是以遇到了一些問題
主要涉及的環境是Windows Server 2003 R2/企業版,未安裝Visual Studio 2010環境時的布署。
安裝.net framework 4,Silverlight sdk 4,Silverlight tools等軟體包後,如果你的WCF RIA應用還不能正常運作,則要檢查以下問題
1. asp.net的版本要選擇為4.0.30319
解決:在IIS6管理器中,選擇Web應用的屬性,asp.net标簽頁中,Asp.net版本選為4.0.30319,以為預設的版本應該是2.0.50727.
現象:如果配置不對,出錯為web.config配置項錯誤。
2. xap的Mine類型問題。
現象:如果配置不對,出錯為Silverlight内容不出現,無論是aspx的測試頁,還是html的測試頁。
原因:xap在IIS6中要注冊一個MIME類型,注冊為application/x-silverlight-app 或者 application/octet-stream 都可以下載下傳
操作:在IIS6管理器中,在機器節點,就是網站節點的父節點,比如,你的主機名是MyServer,則節點名就是這個MyServer(local computer),點屬性,選擇MINE 類型,進行注冊。
3. 允許ASP.NET 4.0.30319
現象:aspx的測試頁無法運作,not found錯誤,但是html的測試頁可以正常運作。
原因:如果剛剛安裝的.net framework 4.0環境,IIS6預設為禁止ASP.NET 4.0.30319的腳本運作。
解決:在IIS6管理器中,選擇主機名節點的子節點中的Web服務擴充(這個節點同“Web Site”同級,同級的有Application pools,Web Sites,Web Service Extension),觀察ASP.NET 4.0.30319項前圖示應該有綠地白色對鈎,Status應該是Allowed。如果不對,右鍵選擇Allow,設定完成。
4. svc 無法通路問題
現象:silverlight運作正常,但是調用WCF RIA Service部分出現異常,彈出錯誤提示。如登入或建立新使用者時。
類似這樣的silverlight異常框
Load operation failed for query 'GetUser'. 遠端伺服器傳回了錯誤: NotFound。
位于 System.ServiceModel.DomainServices.Client.OperationBase.Complete(Exception error) 位于 System.ServiceModel.DomainServices.Client.LoadOperation.Complete(Exception error) 位于 System.ServiceModel.DomainServices.Client.DomainContext.CompleteLoad(IAsyncResult asyncResult) 位于 System.ServiceModel.DomainServices.Client.DomainContext.<>c__DisplayClass1b.<Load>b__17(Object )
原因:svc服務沒有建立
解決:将Web應用目錄中,目錄安全标簽頁中“認證和通路控制”彈出對話框中,僅選擇“Enabled anonymous access ”使能匿名通路,而去掉內建認證。就是說僅有匿名通路。
**設定完成,最好将整個IIS 服務重新啟動,這樣不至于浪費時間。
5. 其他解決
如果IIS6在.net framework 之後安裝,可能需要将一些擴充名注冊到IIS擴充中,可以使用下面第一個指令補救。完成後,在
IIS管理器中Web Site Properties, under Home Directory/Configuration, could you check if extension .svc is mapped to aspnet_isapi.dll
run "c:\windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis -i"
run "c:\windows\Microsoft.NET\Framework\v4.0.30319\ServiceModelReg.exe -i"
有人說,将以下檔案複制到bin目錄下,我們測試結果可以不放
system.servicemodel.domainservices.entityframework
system.servicemodel.domainservices.hosting
system.servicemodel.domainservices.server
的copy local = true。