Медленное время отклика рабочей роли Azure

1

У меня есть простая служба Hello World, использующая OWIN и Nancy в роли Azure Worker. При запуске локально я получаю время отклика ~ 1 мс. Как только я развожу его, он занимает около 250 ~ 400 мс. Он работает на одном экземпляре Standard_A1. Я не думаю, что это проблема Нэнси, поскольку я получаю подобные ответы при использовании WebApi вместо Nancy. Я знаю, что это не та сеть, к которой я обращаюсь, поскольку мониторы также показывают сходное время отклика.

Изображение 174551

Вот мой профиль публикации:

Изображение 174551

Класс My WorkerRole.cs приведен ниже:

public class WorkerRole : RoleEntryPoint
{
    private readonly CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
    private readonly ManualResetEvent runCompleteEvent = new ManualResetEvent(false);
    private IDisposable _app = null;

    public override void Run()
    {
        Trace.TraceInformation("StackOverflow.Example is running");

        try
        {
            this.RunAsync(this.cancellationTokenSource.Token).Wait();
        }
        finally
        {
            this.runCompleteEvent.Set();
        }
    }

    public override bool OnStart()
    {
        ServicePointManager.DefaultConnectionLimit = 64;

        var endpoint = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["DefaultEndpoint"];
        string baseUri = String.Format("{0}://{1}", endpoint.Protocol, endpoint.IPEndpoint);

        Trace.TraceInformation(String.Format("Starting OWIN at {0}", baseUri), "Information");

        _app = WebApp.Start<Startup>(new StartOptions(url: baseUri));

        bool result = base.OnStart();

        Trace.TraceInformation("StackOverflow.Example has been started");

        return result;
    }

    public override void OnStop()
    {
        Trace.TraceInformation("StackOverflow.Example is stopping");

        this.cancellationTokenSource.Cancel();
        this.runCompleteEvent.WaitOne();

        if (_app != null)
        {
            _app.Dispose();
        }

        base.OnStop();

        Trace.TraceInformation("StackOverflow.Example has stopped");
    }

    private async Task RunAsync(CancellationToken cancellationToken)
    {
        // TODO: Replace the following with your own logic.
        while (!cancellationToken.IsCancellationRequested)
        {
            Trace.TraceInformation("Working");
            await Task.Delay(1000);
        }
    }
}

Мой app.config такой:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="owin:HandleAllRequests" value="true"/>
  </appSettings>
</configuration>

Вот контроллер:

public class MonitorController : NancyModule
{
    public MonitorController()
        : base("/api")
    {
        Get["/monitor"] = x => "Hello world!";
    }
}

Любые идеи о том, что может быть причиной этого или как я могу даже пытаться понять причину?

  • 0
    Эмм. Может быть, это как-то связано с этим? await Task.Delay(1000);
  • 0
    @RichTurner Это фактически заставило ответ занять в 3 раза больше времени ... Эта часть фактически генерируется из шаблона VS.
Показать ещё 5 комментариев
Теги:
azure

1 ответ

1
Лучший ответ

Доступ к конечной точке через VIP по сравнению с URL-адресом * cloudapp.net исправил это.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню