通过 NSURLConnection 调用 Webservice 问题,不是每次都调用?

发布于 2025-01-01 22:23:01 字数 2678 浏览 3 评论 0原文

我正在从我的iPhone应用程序(iOS5)调用本地托管的.NET Web服务,如下所示:

(IBAction)btnCallService:(id)sender {
    [XYZActivity startAnimating];
    // So I could show activity on my main UI thread.
    [self performSelector: @selector(CallXYZSService) 
               withObject: nil 
               afterDelay: 0];
   }

 (void) CallXYZSService
{
   NSURL *url = [NSURL URLWithString: @"http://localwinhost/JSON_Service.asmx/GetFunction1"];


    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url cachePolicy:1 timeoutInterval:30];
    NSData *requestData = [NSData dataWithBytes:[jsonRequest UTF8String] length:[jsonRequest length]];

    [request setHTTPMethod:@"POST"];

    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
    [request setValue:@"close" forHTTPHeaderField:@"Connection"];
    [request setValue:[NSString stringWithFormat:@"%d", [requestData length]] forHTTPHeaderField:@"Content-Length"];
    [request setHTTPBody: requestData];
    //[req setHTTPBody: [postStr dataUsingEncoding:NSUTF8StringEncoding]];

    myConn = [[NSURLConnection alloc] initWithRequest:request delegate:self];
    if (myConn) {
        webData = [NSMutableData data];
    }
    else
    {
        NSLog(@"Connection Failed");
   }

}

}


-(void) connection:(NSURLConnection *)connection
didReceiveResponse:(NSURLResponse *) response{
    [webData setLength: 0];
}

-(void) connection:(NSURLConnection *)connection
    didReceiveData:(NSData *) data {
    [webData appendData:data];
}

-(void) connection:(NSURLConnection *)connection
  didFailWithError:(NSError *) error {
 NSLog(@"Service Failed");
}

现在我的问题是有时它调用服务并且我接收数据,有时它不会并且什么也没有发生....甚至没有超时错误.. 我在这里做错了什么,

我正在异步调用我的 web 服务...问题是它甚至没有转到任何其他委托方法,只需准备请求,初始化连接,然后什么也没有发生...

是否有与之前与网络服务的连接有关?至于测试,我在同一服务器上的同一服务上调用 2,3 个不同的函数...但这些发生在不同的视图控制器上...所以我初始化新连接并在 connectionDidFinishLoading 方法中将连接设置为 nil 。

任何人都可以在这里帮助我,如何确保我总是从服务中得到响应,无论是有效响应还是一些错误......或超时...... 如果我在 Safari 中的 MAC 上测试相同的服务,它总是会被调用,没有任何问题......!!!

谢谢, Maverick


我已经更改了代码,如下所示

I have changed the code as below   NSString *jsonRequest_NE =    [NSString stringWithFormat:@"ID=%@&Password=%@",strID,strPwd];
NSString *jsonRequest =    [jsonRequest_NE stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

NSLog(@"Request: %@", jsonRequest);

NSString *myURL = @"http://localwinhost/JSON_Service.asmx/GetFunction1";

NSString *fixedURL = [myURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 

,但行为仍然相同,有时有效,有时却不起作用...... 我已经搜索了很多...但仍然找不到合适的解决方案... 任何人请帮助我eeeeeeeeeeee !!!

I am calling .NET webservice hosted locally from my iPhone app (iOS5) like this:

(IBAction)btnCallService:(id)sender {
    [XYZActivity startAnimating];
    // So I could show activity on my main UI thread.
    [self performSelector: @selector(CallXYZSService) 
               withObject: nil 
               afterDelay: 0];
   }

 (void) CallXYZSService
{
   NSURL *url = [NSURL URLWithString: @"http://localwinhost/JSON_Service.asmx/GetFunction1"];


    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url cachePolicy:1 timeoutInterval:30];
    NSData *requestData = [NSData dataWithBytes:[jsonRequest UTF8String] length:[jsonRequest length]];

    [request setHTTPMethod:@"POST"];

    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
    [request setValue:@"close" forHTTPHeaderField:@"Connection"];
    [request setValue:[NSString stringWithFormat:@"%d", [requestData length]] forHTTPHeaderField:@"Content-Length"];
    [request setHTTPBody: requestData];
    //[req setHTTPBody: [postStr dataUsingEncoding:NSUTF8StringEncoding]];

    myConn = [[NSURLConnection alloc] initWithRequest:request delegate:self];
    if (myConn) {
        webData = [NSMutableData data];
    }
    else
    {
        NSLog(@"Connection Failed");
   }

}

}


-(void) connection:(NSURLConnection *)connection
didReceiveResponse:(NSURLResponse *) response{
    [webData setLength: 0];
}

-(void) connection:(NSURLConnection *)connection
    didReceiveData:(NSData *) data {
    [webData appendData:data];
}

-(void) connection:(NSURLConnection *)connection
  didFailWithError:(NSError *) error {
 NSLog(@"Service Failed");
}

Now my problem is sometimes it calls the service and I recive data , and sometimes it doesn'tand nothing happens.... not even timeout error...

What I am doing wrong here , I am calling my webservice asynch ... issue is it even doesn't go to any other delegate methods , just prepare the request , init the connection and then nothing happens....

Is it has something to do with previous connections to the webservice ? As for testing I am calling 2,3 different functions on same service on same server ... but these are happening on different viewcontrollers ...so I init new connection and set my connection to nil in connectionDidFinishLoading method.

Can any one plz help me here, how to make sure that I always get response back from service either valid response or some error.... or timeout....
If I test the same service on MAC in Safari , it always get called without any issue...!!!

Thanks,
Maverick


I have changed the code as below

I have changed the code as below   NSString *jsonRequest_NE =    [NSString stringWithFormat:@"ID=%@&Password=%@",strID,strPwd];
NSString *jsonRequest =    [jsonRequest_NE stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

NSLog(@"Request: %@", jsonRequest);

NSString *myURL = @"http://localwinhost/JSON_Service.asmx/GetFunction1";

NSString *fixedURL = [myURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 

but still the same beahviour, sometime it works sometimes it just doesn't.....
I have searched alot...but still could't find proper solution...
any one plz help me hereeeeeeeeeeee !!!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

飘然心甜 2025-01-08 22:23:01

确保 jsonRequest 变量中没有任何非 UFT8 字符。
让我知道你是如何做到的。

Make sure you don't have any non-UFT8 characters in your jsonRequest variable.
Let me know how you managed it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文