Как получить правильный URL-адрес WSDL при размещении службы WCF за шлюзом приложений Azure? - PullRequest
0 голосов
/ 10 февраля 2019

Мы находимся в процессе переноса служб из локальной среды в Azure, и теперь мы размещаем унаследованную службу WCF - службу приложений Azure.Чтобы сделать его обратно совместимым с существующими клиентами, он должен быть доступен через {domainNameHere}.com/services.

. Существуют также другие службы, которые должны быть доступны через тот же домен, например {domainNameHere}.com/api.Мы настроили шлюз приложений Azure для маршрутизации запросов к различным службам приложений на основе путей запросов и установили {domainNameHere}.com для указания IP-адреса шлюза приложений.

Это хорошо работает для всех служб, кромеслужба WCF.Он доступен в браузере по адресу https://{domainNameHere}.com/services/exports.svc, но URI WSDL на этой странице показывают URI azurewebsites.net вместо нашего пользовательского домена.Когда клиенты пытаются получить доступ к службе, они получают следующую ошибку:

System.ServiceModel.EndpointNotFoundException:
'There was no endpoint listening at https://{domainNameHere}.com/services/export.svc
that could accept the message. This is often caused by an incorrect address or SOAP
action. See InnerException, if present, for more details.'

Inner Exception
WebException: The remote server returned an error: (404) Not Found.

Мы пытались использовать useRequestHeadersForMetadataAddress в конфигурации WCF, но безрезультатно.

Вот конфигурация WCFвсе в коде.URI endpoint равен https://{domainNameHere}.com/services/exports.svc.

public static void Configure<T>(ServiceConfiguration config, Uri endpoint) where T : class
{
    // Configure service behavior
    config.Description.Behaviors.Add(new ServiceMetadataBehavior { HttpGetEnabled = true, HttpsGetEnabled = true });
    config.Description.Behaviors.Add(new ServiceDebugBehavior { IncludeExceptionDetailInFaults = true });

    var serviceCredential = config.Description.Behaviors.Find<ServiceCredentials>();
    if (serviceCredential == null)
    {
        serviceCredential = new ServiceCredentials();
        config.Description.Behaviors.Add(serviceCredential);
    }

    serviceCredential.UserNameAuthentication.UserNamePasswordValidationMode = UserNamePasswordValidationMode.Custom;
    serviceCredential.UserNameAuthentication.CustomUserNamePasswordValidator = new CredentialsValidator();

    config.AddServiceEndpoint(typeof(T), GetBinding(), endpoint);
}
.

1 Ответ

0 голосов
/ 14 февраля 2019

Я наконец понял это.Шлюз приложений отправлял запросы службе WCF с использованием HTTP, но служба WCF отвечала только по HTTPS.Как только я обновил шлюз приложений для отправки запросов с использованием HTTPS, он работал как положено.

...