Как использовать .Net Remoting через веб-прокси? - PullRequest
3 голосов
/ 08 января 2010

Приложение, которое я пишу, должно использовать .Net Remoting (я знаю, что WCF - это «новая вещь», но, к сожалению, в настоящее время это не вариант, доступный для нас).

В любом случае, все работает нормально, если я не пытаюсь использовать приложение через прокси. Однако приложение должно иметь возможность функционировать через прокси-веб-серверы. Я настроил HttpChannel и установил свойства 'proxyName' и 'proxyPort' в их правильные значения. Это позволяет каналу использовать прокси-сервер без проблем.

У меня есть следующие проблемы:

1: Если прокси-сервер требует аутентификации, кажется, нет способа установить учетные данные, которые канал должен использовать для аутентификации с прокси. Я пробовал как свойство 'credentials', так и свойства 'username' и 'password', но, похоже, оно не работает. Таким образом, конечный результат в случае, когда прокси-сервер требует аутентификации и просто возвращает ошибку аутентификации при каждом вызове удаленного метода.

2: Я не могу заставить HttpChannel использовать системный веб-прокси по умолчанию. Если Internet Explorer настроен на использование прокси-сервера, я должен иметь возможность использовать WebRequest.GetSystemWebProxy () для его получения. Однако, это возвращает IWebProxy, и я не могу извлечь хост и порт из этого. Если кто-нибудь знает способ сделать это, я был бы очень признателен.

Что расстраивает, так это то, что если вы пошагово просматриваете код с помощью Visual Studio и изучаете класс HttpChannel, то существует объект WebProxy. Жизнь была бы намного проще, если бы они предоставили доступ к этому!

Итак, в основном я спрашиваю: как мне заставить HttpChannel правильно использовать веб-прокси, учитывая, что мне нужно иметь возможность использовать прокси-сервер, требующий аутентификации, и возможность автоматического определения настройки прокси в Internet Explorer? Есть ли более простой способ создания экземпляра канала, чтобы я мог просто передать ему прокси-объект в качестве параметра?

Любая помощь очень ценится!

1 Ответ

3 голосов
/ 11 января 2010

Я нашел решение этой проблемы (к сожалению, я потерял адрес блога, который привел меня к этому - если я смогу найти его снова, я отдам должное), и он работает отлично. Для всех, кто заинтересован, добавьте следующий код:

    private static void SetChannelProxy(HttpClientChannel channel, IWebProxy proxy)
    {
        FieldInfo proxyObjectFieldInfo = typeof(HttpClientChannel).GetField("_proxyObject", BindingFlags.Instance | BindingFlags.NonPublic);

        proxyObjectFieldInfo.SetValue(channel, proxy);
    }

Сначала необходимо настроить прокси-объект с использованием учетных данных, которые вы хотите использовать, а затем вызвать этот метод для канала, который вы хотите использовать с прокси.

...