2011-03-25 191 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