405 Ошибка на входной роли Http Worker, когда HostnameComparisonMode имеет значение Exact

У меня ошибка, подобная этой: рабочая роль Azure с конечной точкой ввода HTTP на порту 8732 с ошибкой HTTP 405

Я задал вопрос по MSDN, но ответа пока нет: http://social.msdn.microsoft.com/Forums/en-US/windowsazuredevelopment/thread/6e9c84be-f39a-4da9-953e-a82f98afea54

Проблема в том, что я не могу протестировать несколько экземпляров рабочей роли с помощью конечной точки ввода Http. Когда я запускаю их в эмуляторе Azure, я должен установить для HostnameComparsionMode значение Exact, чтобы сделать соответствующие резервирования http. Однако конечные точки WCF ведут себя странно с LB и HostnameComparsionMode = Exact (см. Guomingliwcf.blogspot.com/2009/08/wcf-load-balance-error-http-405-method.html)

Кто-нибудь знает какой-нибудь обходной путь, как проверить WorkerRoles в эмуляторе Azure с входами Http?

Мое решение для воспроизведения проблемы: https://www.dropbox.com/s/378oaqotdp0axen/HttpRolesTest.zip

ОБНОВЛЕНИЕ: я запускаю сервисные хосты со следующим кодом

    public override void Run()
      {
        // This is a sample worker implementation. Replace with your logic.
        Trace.WriteLine("WorkerRole entry point called", "Information");

        var endpoint = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints.First().Value;
        var ub = new UriBuilder();
        ub.Host = endpoint.IPEndpoint.Address.ToString();
        ub.Port = endpoint.IPEndpoint.Port;
        ub.Scheme = "http";
        ub.Path = "Service";
        var host = new ServiceHost(typeof (Service), ub.Uri);
        host.AddDefaultEndpoints();
        host.Description.Behaviors.Add(new ServiceMetadataBehavior() {HttpGetEnabled = true});
        host.Description.Behaviors.Add(new OverrideWCFAddressFilterServiceBehavior());
        foreach (var e in host.Description.Endpoints)
        {
            ((BasicHttpBinding)e.Binding).HostNameComparisonMode = HostNameComparisonMode.Exact;
        }
        host.Open();
        foreach(var e in host.Description.Endpoints)
        {
            Trace.WriteLine("Host listening on " + e.ListenUri.ToString());
        }
        while (true)
        {
            Thread.Sleep(10000);
            Trace.WriteLine("Working", "Information");
        }
    }

В зависимости от HostNameComparisonMode я получаю следующие поведения:

  • Слабая /StrongWildcard: Exception System.ServiceModel.AddressAlreadyInUseException: HTTP не удалось зарегистрировать URL http://+:
  • Точный: 405 MethodNotAllowed при доступе к wsdl через балансировщик нагрузки

ОБНОВЛЕНИЕ 2

На форуме msdn ответил Аллен Чен.

0 ответов

Другие вопросы по тегам