Метод продолжает выполняться после оператора return - PullRequest
0 голосов
/ 03 июня 2011

В настоящее время я пытаюсь устранить странную ошибку в поставщике переписывания URL-адресов IIS, который я написал. У меня есть if ... else с оператором return внутри каждого блока. Что происходит, если первый блок (если) удаляется и выполняется нормально, возвращаемый результат удаляется, но затем метод не возвращается и продолжается в блок else. Вот код нарушения:

public string Rewrite(string value)
{
    string v = value;
    if (v.Contains(".aspx") || v.Contains("buzz") || v.Contains("promo")) {
        return v;
    } else {
        string val = "";
        using (DataContext db = new DataContext(cs)) {
            var lp = db.LandingPages.FirstOrDefault(l => l.L_Url == v);
            if (lp != null) val = "landing_page.aspx?id=" + lp.L_ID;
        }
        return CoalesceStrings(val, v);
    } 
}

(я знаю, что многое из этого можно сделать гораздо лучше, например, значение v = предназначено для отладки - я плохо его улучшу, когда оно будет работать правильно!)

Есть идеи? Это не похоже на правильное поведение для этого метода. Я отлаживаю его в IIS 7.5, используя присоединение к процессу из VS2010 на компьютере с Windows 7 x64.

Отредактировано, чтобы добавить: шаблон соответствия в iis (?! (Общий | Аякс | Сценарии | загрузка | XML)) ^ (\ ш | \ d | -. | | [? & = /]) +

1 Ответ

3 голосов
/ 03 июня 2011

Я предполагаю, что вы видите странное поведение отладки из-за запуска различных потоков. Вы уверены, что это тот же запрос, который заканчивается в блоке else? IIS будет обрабатывать несколько запросов одновременно, некоторые для изображений, сценариев, CSS и т. Д. Не только для самой страницы. Если вы установите две точки останова в методе, одну в первом возврате, а другую в другом, очень возможно, что после выхода из метода из оператора return процесс снова блокируется при запросе к другому ресурсу внутри оператор else.

При отладке обратите особое внимание на поток, который отлаживается с помощью окна Threads. Также следите за значением, которое приходит, вероятно, оно другое.

...