2011-03-25 181 views
2

我正在研究一些代碼以連接到一個安全的基於.NET的Web服務。我嘗試使用手動創建的SOAP消息,HTTP POST和HTTP GET進行連接。在每次嘗試中,我在NSURLConnection上使用NSMutableURLRequest。我通過以下方式實施了didReceiveAuthenticationChallenge ...iOS 4.3 - 嘗試連接Web服務時網絡連接丟失?

- (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秒後,出現以下錯誤。

連接失敗:錯誤域= NSURLErrorDomain代碼= -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。

現在我已經把頭撞在牆上了幾天了。任何指針將不勝感激。

感謝

肖恩

+0

我只是想通過只註釋掉它,只是放置在URL中的用戶名/密碼,使得不didReceiveAuthenticationChallenge連接的「http://用戶名:密碼@服務器/路徑/要/服務」。仍然收到相同的錯誤。 – Sean 2011-03-25 21:48:44

+0

我也有同樣的問題,肖恩你解決了你的問題,如果是的話請幫我解決這個問題。儘快地。 – Ankur 2012-09-12 10:43:50

回答

0

的iOS 4.3.1(剛剛發佈!)有這樣的發行說明:

解析相關的激活和連接到一些蜂窩網絡錯誤

也許它也解決你的問題。我在iPad上的MonoTouch下使用SOAP有類似的效果。當切換到3G時聲稱它不能連接(套接字錯誤)。如果更新有幫助,我也會嘗試。

+0

我沒有在設備上運行。這些都在模擬器中。 – Sean 2011-03-25 21:31:16

0

還沒有。我想我可能需要編寫一個單獨的服務來處理位於iPad和具有我需要的數據的服務之間的身份驗證。 iPad不會進行任何驗證。不是理想的解決方案,但它暫時可以工作。

+0

這應該是一個評論? – 2011-12-13 01:19:12

3

我剛發現我的錯誤。該網址沒有被正確編碼,但直到我在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]; 
+1

不要忘記,你可以接受你自己的答案! – 2011-12-13 01:20:15

相關問題