IIS перерабатывает Global.asax

Вы можете использовать feature.get (propertyname) в вашем styleFunction и использовать значение для управления стилем, например

var styleFunction = function(feature) {
    var now = new Date().getTime()
    var time = feature.get('time');
    var color;
    if (time < now - (96 * 3600000)) {
        color = 'rgba(255,255,0,'
    } else if (time < now - (48 * 3600000)) {
        color = 'rgba(255,191,0,'
    } else {
        color = 'rgba(255,0,0,'
    }
    return [
        new ol.style.Style({
            image: new ol.style.Circle({
                radius: (feature.get('mag')-3)*5,
                fill : new ol.style.Fill({
                    color: color + '0.5)'
                })
            })
        })
    ]
};

var vectorSource = new ol.source.Vector({
    url: 'https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/4.5_week.geojson',
    format: new ol.format.GeoJSON()
});
var vectorLayer = new ol.layer.Vector({ 
    source: vectorSource,
    style: styleFunction
});

var map = new ol.Map({
    layers: [
        new ol.layer.Tile({
            source: new ol.source.OSM(),
        }),
        vectorLayer
    ],
    target: 'map',
    view: new ol.View({
        center: [0,0],
        zoom: 2,
    })
});
<link rel="stylesheet" href="https://cdn.rawgit.com/openlayers/openlayers.github.io/master/en/v5.3.0/css/ol.css" type="text/css">
<script src="https://cdn.rawgit.com/openlayers/openlayers.github.io/master/en/v5.3.0/build/ol.js"></script>
<div id="map" class="map"></div>

7
задан Lieven Cardoen 16 November 2008 в 17:08
поделиться

3 ответа

Так, вот идея, как это могло работать.

На основе моего предыдущего ответа (присоединяют к AppDomain. CurrentDomain. ProcessExit) и комментарий stephbu:

Это захватит наиболее структурированные разрушения процесса, например, - но я не уверен, что это захватит все холмы слезы. например, Процесс http://blogs.msdn.com/jmstall/archive/2006/11/26/process-exit-event.aspx перерабатывает, уничтожит процесс, если это, будет казаться, будет подвешено - Ваш обработчик не назвать.

Я предлагаю следующую стратегию:

В (обычном) обработчике ProcessExit (то, которое мы предполагаем, не назовут на переработке пула приложений), запишите некоторый файл в диск как"app_domain_end_ok.tmp".

Затем в Application_Start Вашего global.asax проверяют на этот файл. Если это не существует, это - знак, что приложение не было завершено в очевидном способе (или что это - первый раз когда-либо, это запустилось). Не забывайте удалять этот файл из диска после проверки.

Я не попробовал это сам, но это могло стоить попытки.

3
ответ дан 6 December 2019 в 23:15
поделиться

Я нашел эту статью о блоге Scott Guthries:

Вход событий завершения работы приложения ASP.NET

Кто-то на listserv недавно спросил, был ли способ выяснить, почему и когда ASP.NET перезапускает домены приложения. А именно, он искал точную причину того, что инициировало их на его приложении в совместно использованной размещенной среде производства (было это web.config изменение файла, изменение global.asax, app_code изменение каталога, каталог удаляет изменение, макс. цифровые компиляции достигли квоты, \bin изменение каталога, и т.д.).

У Thomas в моей команде есть прохладный фрагмент кода, что он записал, что использует некоторые изящные частные отражательные приемы, чтобы получить и зарегистрировать эту информацию. Это довольно легко к повторному использованию, и добавьте в любое приложение, и может использоваться для входа информации где угодно, Вы хотите (ниже использования кода журнал событий NT для сохранения его – но Вы могли столь же легко отправить его в базу данных или по электронному письму администратору). Код работает и с ASP.NET V1.1 и с ASP.NET V2.0.

Просто добавьте Систему. Отражение и Система. Пространства имен диагностики к Вашему классу/файлу Global.asax, и затем добавляют событие Application_End с этим кодом:

public void Application_End() {

    HttpRuntime runtime = 
       (HttpRuntime) typeof(System.Web.HttpRuntime).InvokeMember("_theRuntime",
          BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.GetField, 
          null, null, null);

    if (runtime == null)
        return;

    string shutDownMessage = 
       (string) runtime.GetType().InvokeMember("_shutDownMessage",
           BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField,
           null, runtime, null);

    string shutDownStack = 
       (string) runtime.GetType().InvokeMember("_shutDownStack",
           BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField,
           null, runtime, null);

    if (!EventLog.SourceExists(".NET Runtime")) {
        EventLog.CreateEventSource(".NET Runtime", "Application");
    }

    EventLog log = new EventLog();
    log.Source = ".NET Runtime";

    log.WriteEntry(String.Format(
          "\r\n\r\n_shutDownMessage={0}\r\n\r\n_shutDownStack={1}", 
          shutDownMessage, shutDownStack),
       EventLogEntryType.Error);
}
7
ответ дан 6 December 2019 в 23:15
поделиться

Я никогда не пробовал это сам, но Вы могли попытаться присоединить обработчик событий к событию ProcessExit AppDomain.

...
AppDomain.CurrentDomain.ProcessExit += new EventHandler(OnExit);
...

void OnExit(object sender, EventArgs e) {
    // do something
}

Я надеюсь, что это помогает!

1
ответ дан 6 December 2019 в 23:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: