Thứ Sáu, 10 tháng 12, 2010

Loại bỏ tính thừa kế trong web.congfig!

Tôi viết bài này nhằm mục đích lần sau vướng phải cái lỗi này thì đỡ mất công lên google để tìm, vì cái lỗi này tiếng việt search mãi mà không thấy ai hỏi và sữa lỗi.

Lỗi nó là như thế này: Tôi xây dựng 1 website, nhưng website của tôi khi dựng lên nó chỉ là một website con, nó là 1 website độc lập riêng nhưng nó được settings là vitualdirectory và lỗi là cái web.config của website con bị kế thừa rất nhiều cái của web.config cha của nó. Như vậy xảy ra nhiều lỗi linh tinh mà mình ko thể kiểm soát được. Ví dụ mình dùng .dll này mà website cha lại dùng .dll khác, hai .dll xung đột. Giờ cách xử lý như thế nào???

Đơn giản nhất và nếu bạn có quyền chỉnh sửa lại cái file web.config cha thì bạn làm như thế này: Sử dụng thuộc tính và đặt nó như sau:

<location path="." inheritInChildApplications="false">

<system.web>
...

system.web>
</location>



Còn nếu bạn không có quyền chỉnh cái web.config của website cha thì có cách khác như sau.
Giả sử trong web.config của website cha nó khai báo những thuộc tính sử dụng như sau:

<httpModules>

<add name="UrlRewriteModule" type="UrlRewritingNet.Web.UrlRewriteModule, UrlRewritingNet.UrlRewriter"/>

<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

httpModules>



Thì khi chạy website của mình nó có lỗi như sau:

Line 88: <httpModules>
Line 89: <add name="UrlRewriteModule" type="UrlRewritingNet.Web.UrlRewriteModule, UrlRewritingNet.UrlRewriter"/>
Line 90: <add name="ScriptModule" type="System.Web.Handlers.ScriptModule,
System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
Line 91: </httpModules>

Trong file web.config của chính mình mình khai báo để không cần dùng cái thừa kế đấy nữa với thuộc tính <remove>:

<httpModules>

<remove name="UrlRewriteModule" />


httpModules>


Dùng cách này thì bạn phải biết web.config cha đang sử dụng những gì để cần mà loại bỏ. Hic vấn đề là mình ko có quyền biết những thuộc tính web.config cha đang sử dụng? vấn đề này nan giải quá chưa giải quyết được hic hic!!!!

Một số link tham khảo:
http://www.aspdotnetfaq.com/Faq/how-to-disable-web-config-inheritance-for-child-applications-in-subfolders-in-asp-net.aspx
http://blogs.happysend.com/gerald%20nupa/27/Disable_webconfig_Inheritance_and_Using_HTTPModules_in_a_Multiple_Application_Environment.aspx
etc...

Không có nhận xét nào:

Đăng nhận xét