Как добавить прокси-сервер в NSURLSession в Xamarin.iOS?

Мне нужно загрузить содержимое веб-просмотра с помощью прокси. У меня есть этот код (Objective-C):

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
configuration.connectionProxyDictionary = @{ (NSString *)kCFStreamPropertyHTTPProxyHost: [proxyURL host], (NSString *)kCFStreamPropertyHTTPProxyPort: [proxyURL port] };

Следующий код Xamarin не работает, ConnectionProxyDictionary установлен, но приложение не использует эти параметры:

var configuration = NSUrlSessionConfiguration.DefaultSessionConfiguration;
configuration.ConnectionProxyDictionary = new NSDictionary("kCFStreamPropertyHTTPProxyHost", proxyURL.Host, "kCFStreamPropertyHTTPProxyPort", proxyURL.port);

Как перенести приведенный выше код Objective-C на Xamarin.iOS? Есть ли другой способ достичь той же цели?


person sallemih    schedule 13.06.2014    source источник


Ответы (2)


Причина, по которой это не работает, заключается в том, что в Objective-C kXX заменяется фактической ссылкой на константу, а в C# вы просто вставляете имя строки.

Вам нужно получить значение этой константы и передать его:

Использовать это:

 using MonoTouch.ObjCRuntime;
 ...

 var keyHost = Dlfcn.GetStringConstant ("kCFStreamPropertyHTTPProxyHost")
 var keyPort = Dlfcn.GetStringConstant ("kCFStreamPropertyHTTPProxyPort")

Затем используйте keyHost и keyPort в качестве параметров в NSDictionary.

person miguel.de.icaza    schedule 16.06.2014
comment
Спасибо. GetStringConstant имеет два параметра: public static NSString GetStringConstant (дескриптор IntPtr, строковый символ); - person sallemih; 16.06.2014
comment
Как получить первый параметр в этом случае? Я предполагаю, что dlopen (строковый путь, режим int) является ответом, но я не понимаю, что такое путь в моем случае и какое правильное значение для режима? - person sallemih; 16.06.2014
comment
Это работает: Dlfcn.dlopen(/System/Library/Frameworks/CFNetwork.framework/CFNetwork, 0); - person sallemih; 16.06.2014

person    schedule
comment
Предоставленный код может помочь, но для того, чтобы сделать его хорошим ответом, вы также должны описать/объяснить, почему/как именно ваш код решает проблему. - person ZygD; 22.04.2015