Вы пользуетесь Библиотекой Microsoft Enterprise? [закрытый]

Вы можете передавать данные в ответ, но вы не можете динамически обновлять шаблон так, как вы описываете. Шаблон создается один раз на стороне сервера, а затем отправляется клиенту. Вам нужно будет использовать JavaScript для чтения потокового ответа и вывода данных на стороне клиента.

Используйте XMLHttpRequest, чтобы сделать запрос к конечной точке, которая будет передавать данные. Затем периодически читайте поток, пока он не будет выполнен.

В этом примере используется очень простой формат сообщения: одна строка данных, за которой следует новая строка. Конечно, вы можете так же усложниться в разборе, сколько хотите, пока есть способ идентифицировать каждое сообщение. Например, вы можете вернуть объект JSON и декодировать его на клиенте.

from time import sleep
from flask import Flask, render_template
from math import sqrt

app = Flask(__name__)

@app.route('/')
def index():
    # render the template (below) that will use JavaScript to read the stream
    return render_template('index.html')

@app.route('/stream_sqrt')
def stream():
    def generate():
        for i in range(500):
            yield '{}\n'.format(sqrt(i))
            sleep(1)

    return app.response_class(generate(), mimetype='text/plain')

app.run()
<p>This is the latest output: <span id="latest"></span></p>
<p>This is all the output:</p>
<ul id="output"></ul>
<script>
    var latest = document.getElementById('latest');
    var output = document.getElementById('output');

    var xhr = new XMLHttpRequest();
    xhr.open('GET', '{{ url_for('stream') }}');
    xhr.send();
    var position = 0;

    function handleNewData() {
        // the response text include the entire response so far
        // split the messages, then take the messages that haven't been handled yet
        // position tracks how many messages have been handled
        // messages end with a newline, so split will always show one extra empty message at the end
        var messages = xhr.responseText.split('\n');
        messages.slice(position, -1).forEach(function(value) {
            latest.textContent = value;  // update the latest value in place
            // build and append a new item to a list to log all output
            var item = document.createElement('li');
            item.textContent = value;
            output.appendChild(item);
        });
        position = messages.length - 1;
    }

    var timer;
    timer = setInterval(function() {
        // check the response for new data
        handleNewData();
        // stop checking once the response has ended
        if (xhr.readyState == XMLHttpRequest.DONE) {
            clearInterval(timer);
            latest.textContent = 'Done';
        }
    }, 1000);
</script>
23
задан tribus 13 June 2009 в 13:29
поделиться

10 ответов

Я считаю, что корпоративная библиотека слишком спроектирована для большинства вещей. Нет, мы его не используем, но большинство наших проектов - это краткосрочные, массовые веб-сайты рекламного характера.

19
ответ дан 29 November 2019 в 01:14
поделиться

это все сказано от имени, которому я верю .. "Enterprise Library" Enterprise, являющийся значительно большим (Да, я знаю, большое определение ... но эй, я пьяный в настоящее время!)

1
ответ дан Andrew Harry 29 November 2019 в 01:14
поделиться

Поработав над несколькими крупномасштабными веб-проектами, я могу порекомендовать блок кэширования из библиотеки ent, поскольку он позволяет использовать nCache или подобное с простым изменением конфигурации. Это позволяет команде разработчиков использовать TDD без необходимости повсеместной установки nCache (или подобного).

Log4Net намного превосходит блок логирования ent lib IMHO.

Блоки безопасности / криптографии Я использовал несколько раз и обычно обнаружил, что они делают то, что говорят на жестяной банке, не будучи слишком обременительными или сложными.

Остальная часть фреймворка опередила другие более простые и (IMHO) лучшие решения Доступ к данным - nHibernate, ActiveRecord, Tarantino

Unity - windsor, spring и т. Д.

Валидация - I используйте стопку замка

1
ответ дан David E 29 November 2019 в 01:14
поделиться

+1 за чрезмерную инженерию. Мы используем log4net вместо блоков регистрации или обработки исключений. Мы используем собственное пространство имен .NET System.Security вместо блоков шифрования entlib. Некоторые инструменты трассировки хороши, но в производстве нет ничего, что могло бы их использовать.

10
ответ дан 29 November 2019 в 01:14
поделиться

Нет, мы не используем его. Фактически, я большой противник блоков Enterprise Library, потому что я видел слишком много проблем обратной совместимости с новыми выпусками блоков.

9
ответ дан 29 November 2019 в 01:14
поделиться

Корпоративная библиотека - это перебор. Это слишком сложно и негибко. Поэтому мы не используем.

В наших проектах (включая те, которые нацелены на сценарии распределенных вычислений в Windows Azure) мы используем Lokad Shared Libraries в качестве облегченной замены. Он подключается к log4net для ведения журнала, Autofac IoC для настройки, предоставляет настраиваемые бизнес-правила, проверку и обработку исключений (с надежностью), блоки приложений, упаковывая все необходимые сборки в несколько файлов dll.

7
ответ дан 29 November 2019 в 01:14
поделиться

Мне нравится старый блок данных приложения, который был отделен от корпоративной библиотеки. Это очень просто и сэкономит много времени. Мы попытались перейти на блок Enterprise, но это не стоило усилий.

Мы используем log4Net для ведения журнала, и это работает нормально.

2
ответ дан 29 November 2019 в 01:14
поделиться

Мы используем его (в частности, Unity, Logging and Validation), и я не могу сказать, что я его большой поклонник.

Блок журналирования определенно перестроен, и, по иронии судьбы, ему все еще не хватает гибкости. Я был поражен тем, сколько кода мне пришлось вырвать и заменить, если я хотел писать более структурированные сообщения журнала в БД, а не только одну таблицу с общими сообщениями. Документация отрывочна, и очень сложно проследить, что на самом деле происходит в вашем регистраторе.

Unity действительно работает нормально. Лично я бы предпочел полностью избегать контейнеров DI, но если вам нужно использовать один, Unity кажется прекрасным.

Я действительно не участвовал в коде, который использует блок Validation, поэтому я не могу сказать вам, как это сработает.

Но в целом я бы сказал, что да, он слишком спроектирован,

7
ответ дан 29 November 2019 в 01:14
поделиться

Я использую его некоторое время, но теперь я обратился к более гибким и простым решениям, таким как log4net для ведения журнала, EF или Linq2sql для доступа к данным и так далее.

1
ответ дан 29 November 2019 в 01:14
поделиться

Мне нравится использовать его, ОСОБЕННО для небольших проектов, потому что это «мне все равно, этот материал просто работает и предоставляет все, что мне нужно, без проблем».

Изощренно? Как так?

2
ответ дан 29 November 2019 в 01:14
поделиться