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 ответил Аллен Чен.