簡體   English   中英

添加IIS UrlRewrite似乎打破了本地IIS服務器上的調試

[英]Adding IIS UrlRewrite seems to break debugging on local IIS server

這個問題讓我感到瘋狂:我正在研究最近創建的項目,突然間我無法調試該特定項目。

我正在使用IIS UrlRewrite 2模塊的本地IIS 7.5。 我的開發機器是帶有Visual Studio 2010 Professional的Windows 7 x64。

在其他項目中進行調試仍然有效。 我在本地IIS中設置了一個條目,我開始在我的本地IIS上調試我的ASP.net 4.0項目。
我能夠使用URL Rewrite 2模塊跟蹤調試問題,直到出現意外行為,並使用新創建的4.0 Web應用程序項目重現問題:

在IIS中添加一個簡單的URL重寫規則與管理設計器后,我無法開始調試,因為我收到錯誤消息

Unable to start debugging on the web server. Could not start ASP.Net debugging.  
More information may be available by starting the project without debugging.

(我也試過從其他項目復制URL-Rewrite設置,到目前為止沒有成功)
在沒有調試的情況下啟動項目可以完美地工作,並且不會顯示任

除此之外,我只在default.aspx的默認文本中添加了一些字符

IIS中的站點設置
- 我創建了一個新站點,分配了一個綁定(哪個端口無關緊要,例如我嘗試了端口86),就像我一直這樣。
- 我將新創建的應用程序池中的用戶標識設置為“networkservice”
- 將新創建的應用程序池的框架版本設置為“4.0”
- 我已將用戶'networkservice'完整目錄權限授予解決方案目錄

我還嘗試了其他幾種設置組合,例如啟用WindowsAuthentification,FormsAuthentication等等。 到目前為止沒有運氣。

這是項目的Web選項卡
服務器:使用本地IIS Web服務器,項目URL“http:// localhost:86 /”(我也嘗試使用“http:// localhost:86”,似乎沒有什么區別)

這里發生了什么? 我在這里失去了理智。 有想法該怎么解決這個嗎? (不使用UrlRewrite 2.0模塊是沒有選擇)

最后是web.config

<?xml version="1.0" encoding="UTF-8"?>

<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->

<configuration>
  <connectionStrings>
    <add name="ApplicationServices" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient" />
  </connectionStrings>

  <system.web>
    <compilation debug="true" targetFramework="4.0" />

    <authentication mode="Forms">
      <forms loginUrl="~/Account/Login.aspx" timeout="2880" />
    </authentication>

    <membership>
      <providers>
        <clear />
        <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
      </providers>
    </membership>

    <profile>
      <providers>
        <clear />
        <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/" />
      </providers>
    </profile>

    <roleManager enabled="false">
      <providers>
        <clear />
        <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/" />
        <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
      </providers>
    </roleManager>

  </system.web>

  <system.webServer>
     <modules runAllManagedModulesForAllRequests="true" />
        <rewrite>
            <rules>
                <rule name="LowerCaseRule1" stopProcessing="true">
                    <match url="[A-Z]" ignoreCase="false" />
                    <action type="Redirect" url="{ToLower:{URL}}" />
                </rule>
            </rules>
        </rewrite>
  </system.webServer>
</configuration>

更新 :顯然我可以使用ActionType =“Rewrite”進行調試,但不能使用ActionType =“Redirect”進行調試。 盡管如此,仍然沒有真正的選擇,因為我希望在第一次放置時解決該問題,而不是通過一些解決方法來解決問題。 我現在非常想提供賞金,但系統不會讓我這么做。

任何人都可以重現我的步驟嗎? (到目前為止,我在2台不同的計算機上得到了它

Visual Studio在啟動時會(由於某種原因)嘗試訪問URL:

/debugattach.aspx

如果你有一個重寫規則,重定向(或以其他方式捕獲),比如.aspx文件,在其他地方,那么你將得到這個錯誤。 解決方案是將此部分添加到web.config<system.webServer>/<rewrite>/<rules>部分的開頭:

<rule name="Ignore Default.aspx" enabled="true" stopProcessing="true">
    <match url="^debugattach\.aspx" />
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
    <action type="None" />
</rule>

這將確保捕獲這一個特定請求,什么都不做,最重要的是,停止執行,這樣就不會運行任何其他規則。 這是一個強大的解決方案,因此請隨意將其保存在配置文件中以進行生產。

我剛剛發現,如果您正在使用的項目URL(右鍵單擊您的項目,轉到屬性,單擊左側的Web選項卡)會觸發您的重寫規則,然后使用播放按鈕進行調試將無法正常工作。 “修復”只是將項目URL設置為不會被重寫的URL。

例如,我使用URL重寫來確保HTTP請求被重定向到HTTPS。 只要我的項目URL以https://開頭,那么我就沒有問題調試(除了我必須在我的開發機器上安裝SSL證書這一事實,但這很容易解決)。

我遇到了同樣的問題。 我無法啟動我在Visual Studio中調試的項目。 我跟着你們給了不止一條指令。

首先,我必須創建一個規則來忽略頁面/debugattach.aspx,就像@Kirk Woll所說的那樣。

其次,我必須遵循道格指示。 我的項目指向通過頁面“index.aspx”開始操作,我的規則被創建以刪除aspx擴展。 因此,將起始頁面更改為已格式化的頁面(沒有.aspx),它可以完美地工作。

PS。 1:我的項目中有超過5個規則,我已經逐個隔離以確定導致問題的規則,並且我發現導致問題的規則是刪除aspx擴展的規則。

PS。 2:即使糾正項目開始頁面,它仍然無法正常工作,只有在我添加了忽略頁面/debugattach.aspx的規則時才有效。

PS。 3:我不得改變我的任何規則以匹配一些我應該忽略的模式

問題是所有文件都將被強制使用規則,除非條件明確排除它們。 我沒有附近的源代碼,但我想這就是訣竅:

  <conditions>
    <add input="{URL}" matchType="Pattern" pattern="^.+\.((axd)|(js)|(xaml))$" ignoreCase="true" negate="true"/>
  </conditions>

LowerCaseRule條目應如下所示:

<rule name="LowerCaseRule1" enabled="true" stopProcessing="true">
  <match url="[A-Z]" ignoreCase="false"/>
  <conditions>
    <add input="{URL}" matchType="Pattern" pattern="^.+\.((axd)|(js)|(xaml))$" ignoreCase="true" negate="true"/>
  </conditions>
  <action type="Redirect" url="{ToLower:{URL}}"/>
</rule> 

我遇到了這個問題,解決方案是將主機名添加到IIS中的站點綁定,然后將項目URL從http更改為https。

我在使用VS 2010,IIS 7和URLRewriter 2時遇到了類似的問題並找到了解決方法 - 但希望有人會為您發布真正的解決方案。

您可以將調試器附加到IIS進程並按如下方式進行調試:1。在Visual Studio中,單擊“調試”>“啟動而不調試”2.設置斷點3.單擊“調試”>“附加到進程”。
3.選中“在所有會話中顯示進程”復選框。 4.突出顯示w3wp.exe(iis工作進程)並單擊“附加”5.在瀏覽器中,轉到將導致斷點被觸發的URL 6.在Visual Studio中,應在斷點處暫停代碼你可以照常上班。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM