iOS 4.3 - сетевое соединение потеряно при попытке подключения к веб-сервису? - PullRequest
2 голосов
/ 25 марта 2011

Я работаю над кодом для подключения к защищенному веб-сервису на основе .NET.Я попытался подключиться с помощью созданного вручную сообщения SOAP, HTTP POST и HTTP GET.В каждой попытке я использую NSMutableURLRequest на NSURLConnection.Я реализовал didReceiveAuthenticationChallenge следующим образом ...

- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
{
    NSLog(@"Authentication challenge");

    if ([challenge previousFailureCount] == 0) 
    {
        NSLog(@"authentication failed");

        NSURLCredential *credential ;

        credential = [NSURLCredential credentialWithUser:@"username" password:@"password" persistence:NSURLCredentialPersistenceForSession];

        NSLog(@"credential created");

        [[challenge sender] useCredential:credential forAuthenticationChallenge:challenge];

        NSLog(@"credential sent");
    } 
    else 
    {
        NSLog(@"Credentials are wrong!");

        [[challenge sender] cancelAuthenticationChallenge:challenge];
    }
}

Появляются все сообщения журнала.Примерно через 30 секунд после того, как «учетные данные отправлены», я получаю следующую ошибку.

Ошибка подключения: Ошибка Domain = NSURLErrorDomain Code = -1005 «Сетевое подключение было потеряно.»

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

- (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace 
{
    NSLog(@"canAuthenticateAgainstProtectionSpace");

    //return YES to say that we have the necessary credentials to access the requested    resource
    return YES;
}

Имя пользователя / пароль, который я отправляю в ответ на вызов, существует.Я подтвердил, введя URL-адрес службы в браузере и введя имя пользователя / пароль в диалоговом окне аутентификации.XML возвращается при вызове сервиса через браузер.

Я уже несколько дней бьюсь об это головой об стену.Любые указатели будут с благодарностью.

Спасибо

Шон

Ответы [ 3 ]

3 голосов
/ 11 апреля 2011

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

NSString *myURL = [NSString stringWithFormat:@"http://server/path/to/service.asmx/Method?param=%@", param.text];

NSString *fixedURL = [myURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 

NSURL *URL = [NSURL URLWithString:fixedURL];

NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:URL];
0 голосов
/ 04 апреля 2011

Нет, еще нет.Я думаю, что мне, возможно, придется написать отдельный сервис для обработки аутентификации, который находится между iPad и сервисом, в котором есть нужные мне данныеIPad не выполняет никакой аутентификации.Не идеальное решение, но оно пока работает.

0 голосов
/ 25 марта 2011

iOS 4.3.1 (только что выпущена!) Имеет это в примечаниях к выпуску:

Устраняет ошибки, связанные с активацией и подключением к некоторым сотовым сетям

Возможнотакже решает вашу проблему.У меня есть подобные эффекты, используя SOAP под MonoTouch на iPad.При переключении на 3G заявляет, что не может подключиться (ошибка сокета).Я также попробую, если обновление помогает.

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