Как да добавите прокси към 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 handle, string symbol); - 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