• Иллюстрированный самоучитель по Architecture .NET

    Добавление на сервер обработки управляющей структуры if-else-endif

    В файле if_else_endif.srf содержится управляющая структура if-else-endif (если-иначе-конец если). Аналогичный обработчик добавляется в динамически подключаемую библиотеку (DLL) Web-приложения. Обратите внимание, что если количество секунд четное, то возвращаемым значением является HTTP_SUCCESS (success – "успех"), а если нечетное, то возвращается HTTP_S_FALSE (false – "ложь"). S в HTTP_S_FALSE означает, что на самом деле это успешный (successful) код, и никакой ошибки нет.

    Вероятность каждого исхода составляет 50%. Таким образом, если клиент выполнял обновление несколько раз, то оба указанных результата будут равномерно распределены. Обратите внимание, что метод ShouldThisBeDone ("должно ли это быть сделано") на самом деле никаких HTML-данных клиенту не отправляет. Он предназначен только для того, чтобы управлять размещением текста и дескрипторов между дескрипторами if (если), else (иначе) и endif (конец если), находящимися в .srf-файле. Вот код C++ для этих новых возможностей.

    // Обработчик для проверки if (если), else(иначе) и endif
    [request_handler("if_else_endif")]
    class C_if_else_endif_ATLServerAppHandler
    {
    protected: // защищенный
    [ tag_name(name="ShouldThisBeDone") ]
    HTTP_CODE ShouldThisBeDone(void)
    {
    SYSTEMTIME systemTime;
    GetLocALTime(&systemTime);
    // возвратить HTTP_SUCCESS в 50% случаев
    if (systemTime.wSecond % 2)
    return HTTP_SUCCESS;
    else
    return HTTP_S_FALSE;
    }
    };
    

    HTTP_SUCCESS и HTTP_S_FALSE в действительности представляют соответственно значения TRUE (ИСТИНА) и FALSE (ЛОЖЬ). Если вы в своем браузере укажете if_else_endif.srf и несколько раз обновите браузер, то увидите, что эти два исхода появляются в случайном порядке. И хотя в приоре такое не встречается, между дескрипторами if (если), else (иначе) и endif можно расположить другие дескрипторы.

    {{handler ATLServerApp.dll/if_else_endif}}
    {{if ShouldThisBeDone}}
    Here is text that is displayed if ShouldThisBeDone
    {{else}}
    Here is text that is displayed if *not* ShouldThisBeDone
    {{endif}}
    Вот более русифицированная версия.
    {{обработчик ATLServerApp.dll/if_else_endif}}
    {{если ShouldThisBeDone}}
    Вот – текст, который отображается если ShouldThisBeDone
    {{иначе}}
    Вот – текст, который отображается если *не* ShouldThisBeDone
    {{конец если}}
    

    Результат можно увидеть, перейдя по адресу http://localhost/ATLServerApp/if_else_endif.srf. Два возможных исхода показаны на рис. 12.10. и 12.11.

    Иллюстрированный самоучитель по Architecture .NET › Web-узлы и Web-службы, работающие на основе ATL Server › Добавление на сервер обработки управляющей структуры if-else-endif
    Рис. 12.10. Просмотр if_else_endif.srf

    Иллюстрированный самоучитель по Architecture .NET › Web-узлы и Web-службы, работающие на основе ATL Server › Добавление на сервер обработки управляющей структуры if-else-endif
    Рис. 12.11. Другой просмотр if_else_endif.srf

    Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.