2009-03-26 37 views
15

Đối với IIS6 tôi có thể sử dụng người giúp IIS trong Wix để cài đặt một ứng dụng web như thế này:Làm cách nào để cài đặt ứng dụng ASP.Net MVC trên IIS 7 bằng Wix?

<iis:WebAppPool 
    Id="AP_MyApp" 
    Name="My Application Pool" 
    Identity="networkService" /> 
<iis:WebApplication 
    Id="WA_MyApp" 
    Name="MyApp" 
    WebAppPool="AP_MyApp"> 
    <iis:WebApplicationExtension 
     CheckPath="no" 
     Executable="[NETFRAMEWORK20INSTALLROOTDIR]aspnet_isapi.dll" 
     Verbs="GET,HEAD,POST"/> 
</iis:WebApplication> 

Thật không may, điều này không làm việc cho IIS7. Chúng tôi không muốn sử dụng cơ chế aspnet_isapi.dll, và thay vào đó muốn các đường ống tích hợp để xử lý các yêu cầu định tuyến. Hồ bơi ứng dụng được tạo bởi tập lệnh này ở chế độ Cổ điển không phải chế độ Tích hợp nên không có trình xử lý nào chạy đúng cách.

Tôi làm cách nào để cài đặt đúng ứng dụng MVC trên IIS 7?

+0

Vâng, thật không may là các phạm vi IIS chưa được IIS7 hỗ trợ. – alexn

Trả lời

2

Các phần mở rộng IIS cho WIX không hỗ trợ IIS7. Nhóm IIS tiếp tục viết lại metabase giữa các phiên bản. Có khá nhiều thứ không hoạt động, thiếu một nhóm ứng dụng tích hợp trong số đó.

Cho đến khi các phần mở rộng được viết lại, bạn đang trái với ba lựa chọn:

  • Sử dụng xây dựng trong hành động tùy chỉnh để gọi appcmd.exe
  • Sử dụng XmlConfig để cập nhật applicationHost.config
  • Viết riêng của bạn hành động tùy chỉnh

Tôi đã chọn tùy chọn xmlconfig tại thời điểm này vì bạn có thể thực hiện việc này trong một thành phần và buộc nó vào một đối tượng địa lý.

+0

Điều đó không chính xác. Mike đã thực hiện rất nhiều công việc để có được IIS7 được hỗ trợ bởi các CustomActions hiện tại. Rất tiếc, mã chỉ hỗ trợ nội dung "cũ". Như đã nói ở trên, tích hợp đường ống cần mã tùy chỉnh. –

+1

OK - Tôi đã không nhận thức được công việc đang được thực hiện để hỗ trợ IIS7 - Tôi thấy một nhận xét cho thấy hỗ trợ Apache có thể đến sớm hơn: p Tôi đã ấn tượng rằng một số công cụ đã hoạt động nếu bạn bật tính tương thích metabase IIS6 và đó là nó . Tốt để nghe. – matthewthurlow

+1

Để rõ ràng, bạn vẫn cần IIS6 metabase khả năng tương thích, nhưng, ít nhất, nó sẽ làm việc. Và đó là nhận xét của tôi khi tôi bực mình với IIS. –

4

Nhờ @matthewthurlow, tôi đã có thể sử dụng utils XML để đạt được những gì mình cần phải làm:

<util:XmlFile 
    Id="ModifyAppPoolPipelineType" 
    Action="setValue" 
    ElementPath="//configuration/system.applicationHost/applicationPools/add[\[]@name='My Application Pool'[\]]/@managedPipelineMode" 
    File="[WindowsFolder]System32\inetsrv\config\applicationHost.config" 
    Value="Integrated"/> 

Phần còn lại của những hành động dường như làm việc tốt với IIS 7.

+2

Khi gỡ cài đặt cách bạn thực hiện mục nhập? – CheGueVerra

11

Cá nhân tôi khuyên bạn nên sử dụng AppCmd.exe (bullet đầu tiên của matthewthurlow) vì bạn không phải dựa vào các thành phần quản lý cũ được cài đặt, hoặc rủi ro sửa đổi cấu hình XML theo cách thủ công.

Nếu bạn không thoải mái với APPCMD, Mike Volodarsky có một bài viết tuyệt vời trên Getting Started with AppCmd.exe, và Microsoft IIS Configuration Reference là tuyệt vời, cung cấp giao diện người dùng, Mã và APPCMD ví dụ cho điều chỉnh mỗi mục cấu hình (ví dụ Application Pools). IIS7 Administration Pack cũng bao gồm Trình chỉnh sửa cấu hình cho phép bạn generate AppCmd scripts từ bất kỳ cấu hình hiện có nào.

Để tích hợp AppCmd ​​vào WiX, bạn cần tạo và lập lịch hai hành động tùy chỉnh cho mỗi lệnh. Có thông tin chung trong hướng dẫn sử dụng WiX v3 documenting this procedure và tôi đã đưa vào một ví dụ cụ thể bên dưới.

Trước tiên, bạn cần phải thiết lập một hành động ngay lập tức để lưu trữ các dòng lệnh trong một tài sản:

<CustomAction 
    Id="CreateAppPool_Cmd" 
    Property="CreateAppPool" 
    Execute="immediate" 
    Value="&quot;[WindowsFolder]system32\inetsrv\APPCMD.EXE&quot; add apppool /name:&quot;[APP_POOL_NAME]&quot;" /> 

Tiếp theo, bạn thiết lập một hành động chậm mà tham chiếu khách sạn này:

<CustomAction 
    Id="CreateAppPool" 
    BinaryKey="WixCA" 
    DllEntry="CAQuietExec" 
    Execute="deferred" 
    Return="ignore" 
    Impersonate="no"/> 

Và cuối cùng, bạn cần lên lịch cho chúng. Hành động ngay lập tức đặt các thuộc tính có vẻ hoạt động tốt sau khi InstallFinalize và hành động trì hoãn hoạt động sau khi InstallFiles. Tôi đã không có như xa như figuring ra hành động rollback được nêu ra.

MapGuide Mã nguồn mở thực hiện phương pháp này rộng rãi; bạn có thể xem lịch biểu CA trong tệp MapGuide.wxs và định nghĩa CA trong tệp IIS7.wxs của chúng tôi.

+0

Cảm ơn thông tin tốt Jason! – si618

+0

Điều này rất hữu ích cho tôi ngày hôm qua, và cảm ơn các liên kết đến các ví dụ quá! –

Các vấn đề liên quan