Trong bài viết này, mình sẽ hướng dẫn các bạn cách deploy ứng dụng Silverlight có sử dụng WCF RIA Services lên localhost. Mình sử dụng ứng dụng TaskManager đã được hướng dẫn trong bài viết trước để deploy.
Trước tiên, bạn phải đảm bảo đã cài IIS và solution không có lỗi. Sau đó, right-click trên project web (TaskManager.Web) trong Solution Explorer chọn Publish… để Publish website lên IIS localhost.

Trong cửa sổ Publish Web, chọn Publish method là File System và đường dẫn đến thư mục bạn muốn publish website, ví dụ: C:\inetpub\wwwroot\TaskManager rồi bấm Publish. Bạn có thể sử dụng các kiểu publish method khác như: Web Deploy, FTP…

Visual Studio đã giúp bạn publish website vào thư mục TaskManager. Trong trường hợp web server chưa cài RIA Services, bạn phải copy assembly của RIA Services vào thư mục bin (C:\inetpub\wwwroot\TaskManager\bin). Hai file assembly cần cho RIA Services là
System.ServiceModel.DomainServices.Hosting.dll và
System.ServiceModel.DomainServices.Server.dll
Trong cửa sổ Properties của assembly references project web (TaskManager.Web), gán giá trị cho property Copy Local là True để Visual Studio tự động copy hai assembly đó vào thư mục bin cho mình.
Tiếp đến, mở IIS để tạo mới website trỏ đến thư mục C:\inetpub\wwwroot\TaskManager\

Ở mục Physical path trong cửa sổ Add Web Site, chọn thư mục chứa website đã publish C:\inetpub\wwwroot\TaskManager rồi bấm OK

.NET Framework version
Browse thử website TaskManager tại địa chỉ http://localhost/
Thật không may, “Server Error in ‘/’ Application. Unrecognized attribute ‘targetFramework’. Note that attribute names are case-sensitive.

Lỗi này xảy ra do Application Pools không trỏ đến đúng .NET Framework 4.0
Bạn cần chỉnh .NET Framework version cho đúng .NET Framework v4.0.30319

Trong trường hợp bạn cài đặt .NET Framework 4.0 sau IIS, IIS sẽ không thấy .NET Framework v4.0.30319 trong combobox. Khi đó bạn cần cài đặt ASP.NET 4.0 lên IIS
- Mở Command Prompt lên
- Chạy "%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe" –i
Thử vào lại http://localhost/
Bạn có thể gặp lỗi
HTTP Error 403.14 - Forbidden
The Web server is configured to not list the contents of this directory.
vì website TaskManager không có page Default.aspx. Hoặc bạn đổi tên file TaskManagerTestPage.aspx trong thư mục C:\inetpub\wwwroot\TaskManager thành Default.aspx hoặc thêm TaskManagerTestPage.aspx vào Default Document của website.

Thử vào lại http://localhost/
Lại một lỗi khác xuất hiện
System.ServiceModel.DomainServices.Client.DomainOperationException: Load operation failed for query 'GetTasks'. The underlying provider failed on Open. InnerException message: Cannot open database "TaskManager" requested by the login. The login failed.
Login failed for user 'IIS APPPOOL\TaskManager'.

Để giải quyết vấn đề này, cách nhanh nhất là chỉnh Identity trong Advanced Settings của Application Pool thành LocalSystem.


Một cách khác để giải quyết vấn trên là cấp quyền truy cập database TaskManager cho user IIS APPPOOL\TaskManager
- Mở Microsoft SQL Server Management Studio
- Right-click vào mục Logins trong mục Security chọn New Login…
- Gõ IIS APPPOOL\TaskManager vào mục Login name rồi bấm OK

- Right-click trên mục Users (Databases > TaskManager > Security > Users) chọn New User…
- Đặt tên cho User name (ví dụ iis_user)
- Đánh dấu vào Login name và gõ IIS APPPOOL\TaskManager vào textbox
- Đánh dấu vào db_owner trong phần Database role membership rồi bấm OK.

Vào lại http://localhost/ dữ liệu đã được load lên đúng.
Để ý rằng không có file service .asmx hay .svc nào trong thư mục C:\inetpub\wwwroot\TaskManager. Thực sự, RIA Services cũng tạo động một service để client có thể connect đến để giao tiếp. Tên của service đó bằng ten-cua-project-web-ten-domain-service (các dấu . được thay bằng dấu –)
Trong trường hợp này, có một service được tạo ra tại địa chỉ
http://localhost/TaskManager-Web-TasksDomainService.svc 
Chúc các bạn code vui vẻ ^_^
Tham khảo:
Silverlight TV 51: Debugging and Deploying WCF RIA Services
A Guide to Deploying RIA Services Solutions
Deploying your Silverlight and WCF RIA Services application
Understanding the WCF in "WCF RIA Services"
ASP.NET IIS Registration Tool (aspnet_regiis.exe)
Application Pool Identities