Mono / WCF: невозможно определить IP вызывающего абонента в Ubuntu

1

У меня есть веб-сервис, написанный на С#, и я пытаюсь запустить его на Mono (Mono JIT-компилятор версии 2.10.8.1 (Debian 2.10.8.1-1ubuntu2.2))

В веб-службе есть вспомогательная функция для определения IP-адреса вызывающего абонента:

    public static System.Net.IPAddress GetCallerIP()
    {
        System.ServiceModel.OperationContext context = System.ServiceModel.OperationContext.Current;
        System.ServiceModel.Channels.MessageProperties prop = context.IncomingMessageProperties;
        System.ServiceModel.Channels.RemoteEndpointMessageProperty callerEndpoint =
            prop[System.ServiceModel.Channels.RemoteEndpointMessageProperty.Name] as System.ServiceModel.Channels.RemoteEndpointMessageProperty;

        System.Net.IPAddress ip= System.Net.IPAddress.Parse(callerEndpoint.Address);
        return ip;
    }

В Windows есть 6 свойств в prop: Via, httpRequest, System.ServiceModel.Channels.RemoteEndpointMessageProperty, UriTemplateMatchResults, UriMatched, HttpOperationName

На Ubuntu я вижу только 3 свойства: Via, httpRequest, Urimatched

Поэтому моя вспомогательная функция не может определить IP-адрес вызывающего абонента при работе на Ubuntu. Что не так?

Дополнительная информация

Mono поддерживает RemoteEndpointMessageProperty с 2.10.3, поэтому я уверен, что моя версия Mono поддерживает его.

Что касается RemoteEndpointMessageProperty, MSDN говорит следующее в разделе "Примечания":

Свойство добавляется к каждому входящему сообщению в службу Windows Communication Foundation (WCF) через оба транспорта HTTP и TCP.

Свойство отсутствует в сообщениях, полученных либо по именованным каналам, либо по транспорту MSMQ.

Интересно, относится ли это к моей проблеме? Но как я могу проверить?

Теги:
web-services
wcf
mono

1 ответ

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

mono является открытым исходным кодом, поэтому вы всегда можете просто просмотреть код и историю фиксации. Кроме того, вы можете даже отлаживать само время выполнения, например, в monodevelop "Только код проекта Debug, не monodevelop в код рамки".

С быстрого взгляда, для сообщений HTTP POST соответствующее свойство устанавливается с момента фиксации fd8ae35d. Хотя это предшествует выпуску 2.10.8.1, к сожалению, эта версия появилась из другой ветки и, следовательно, не включает это изменение. Первая версия содержит 2.11.0.

Серия 2.x очень устарела, но в любом случае обновление - хорошая идея.

  • 0
    Я обновился до Mono 3.4.0 и MonoDevelop 4.0 и обновил целевую инфраструктуру моего проекта до Mono / .NET 4.5, но все еще наблюдаю точно такое же поведение.
  • 0
    Я даже не смог запустить простой веб-сервис WCF для тестирования, поэтому вы опередили меня. Разместите завершенный проект или используйте источники и отладчик, чтобы узнать, где находится ошибка.

Ещё вопросы

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