WCF: неверный URI, возвращаемый OperationContext.IncomingMessageProperties.Via - PullRequest
3 голосов
/ 08 марта 2011

Я предоставляю услуги WCF в IIS.У меня есть несколько привязок имени хоста, настроенных в IIS для сайта.Однако при выполнении запросов к любой из привязок не по умолчанию правильный URL-адрес не сообщается свойством OperationContext.IncomingMessageProperties.Via.В сообщаемом URL-адресе используется имя хоста привязки по умолчанию в качестве базы с тем же путем и строкой запроса.

Например, при условии следующих привязок:

http://subfoo.services.myapp.com (first/default entry)
http://subbar.services.myapp.com

При выполнении запроса к: http://subbar.services.myapp.com/someservice?id=123

Свойство Via сообщает URI запроса в виде: http://subfoo.services.myapp.com/someservice?id=123

Как получить URL с фактическим запрошенным именем хоста?

1 Ответ

6 голосов
/ 06 мая 2011

возможно, только немного вовлечено. Вам нужно получить HTTP-заголовок хоста и заменить сегмент хоста IncomingMessageProperties.Via Uri. Вот пример кода с комментариями:

OperationContext operationContext = OperationContext.Current;
HttpRequestMessageProperty httpRequest = operationContext.IncomingMessageProperties[HttpRequestMessageProperty.Name] as HttpRequestMessageProperty;
if (httpRequest != null)
{
    // Get the OperationContext request Uri:
    Uri viaUri = operationContext.IncomingMessageProperties.Via;
    // Get the HTTP Host Header value:
    string host = httpRequest.Headers[System.Net.HttpRequestHeader.Host];
    // Build a new Uri replacing the host component of the Via Uri:
    var uriBuilder = new UriBuilder(viaUri) { Host = host };

    // This is the Uri which was requested:
    string originalRequestUri = uriBuilder.Uri.AbsoluteUri;
}

HTH:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...