Xcode не вызывает asp.net веб-сервис - PullRequest
1 голос
/ 17 марта 2010

У меня есть база данных Oracle и с помощью веб-сервиса я хочу вставить в нее несколько записей Поэтому я создал веб-сервис в asp.net следующим образом

 public bool PickPill(string Me_id, string Mem_device_id, string Test_datetime, string Creation_id, string PillBayNo)
    {
        string Hed_seq_id = Hed_seq_Id();
        bool ResultHED = InsHealthEData(Hed_seq_id, Mem_device_id, Me_id, Test_datetime, Creation_id);
        bool ResultHET = InsHealthETest(Hed_seq_id, PillBayNo, Test_datetime, Creation_id);

        if (ResultHED == ResultHET == true)
            return true;
        else
            return false;

    }

эта функция сделала для меня весь трюк со вставкой данных. Я проверил этот сервис на локальной машине с IP-адресом. Http: 72.44.151.178/PickPillService.asmx затем, Я вижу пример того, как прикрепить веб-сервис asp.net к приложениям для iphone. http://www.devx.com/wireless/Article/43209/0/page/4 Затем я создал код simillar в xcode, который имеет 2 файла

  1. ConsumePillServiceViewController.m
  2. Файл ConsumePillServiceViewController.h

Теперь, Используя конструктор xcode, я создал 5 текстовых полей (Me_id, Mem_device_id, Test_datetime, Creation_id, PillBayNo) со всеми параметрами жесткого кода, как того требует наш сервис затем измените мой файл ConsumePillServiceViewController.h следующим образом

@interface ConsumePillServiceViewController : UIViewController {
 //---outlets---
  IBOutlet UITextField *Me_id;
  IBOutlet UITextField *Mem_device_id;
  IBOutlet UITextField *Test_datetime;
  IBOutlet UITextField *Creation_id;
  IBOutlet UITextField *PillBayNo;
 //---web service access---
    NSMutableData *webData;
    NSMutableString *soapResults;
    NSURLConnection *conn;

}
@property (nonatomic, retain) UITextField *Me_id;
@property (nonatomic, retain) UITextField *Mem_device_id;
@property (nonatomic, retain) UITextField *Test_datetime;
@property (nonatomic, retain) UITextField *Creation_id;
@property (nonatomic, retain) UITextField *PillBayNo;
- (IBAction)buttonClicked:(id)sender;
@end

and 
ConsumePillServiceViewController.m as follows

#import "ConsumePillServiceViewController.h"

@implementation ConsumePillServiceViewController
@synthesize Me_id;
@synthesize Mem_device_id;
@synthesize Test_datetime;
@synthesize Creation_id;
@synthesize PillBayNo;

- (IBAction)buttonClicked:(id)sender {
NSString *soapMsg = 
 @"<?xml version=\"1.0\" encoding=\"utf-8\"?>"
 "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"
 "<soap:Body>"
"<PickPill xml1ns=\"http://tempuri.org/\">";
NSString *smMe_id=
[soapMsg stringByAppendingString:
[NSString stringWithFormat:
@"<Me_id>%@</Me_id>",Me_id.text]];

 NSString *smMem_device_id=
 [smMe_id stringByAppendingString:
[NSString stringWithFormat:
 @"<Mem_device_id>%@</Mem_device_id>",Mem_device_id.text]];

NSString *smTest_datetime=
 [smMem_device_id stringByAppendingString:
 [NSString stringWithFormat:
  @"<Test_datetime>%@</Test_datetime>",Test_datetime.text]];

NSString *smCreation_id=
 [smTest_datetime stringByAppendingString:
[NSString stringWithFormat:
 @"<Creation_id>%@</Creation_id>",Creation_id.text]];

NSString *smPillBayNo=
 [smCreation_id stringByAppendingString:
[NSString stringWithFormat:
 @"<PillBayNo>%@</PillBayNo>",PillBayNo.text]];

NSString *smRestMsg=
 [smPillBayNo stringByAppendingString:
@"</PickPill>"
"</soap:Body>" "</soap:Envelope>"];

 soapMsg=smRestMsg;

 //---print it to the Debugger Console for verification---
 NSLog(soapMsg);


 NSURL *url = [NSURL URLWithString:   //create a URL load request object using instances :
      @"http://72.44.151.178/PickPillService.asmx"];//of the NSMutableURLRequest and NSURL objects
 NSMutableURLRequest *req = 
 [NSMutableURLRequest requestWithURL:url];



 //opulate the request object with the various headers, such as Content-Type, SOAPAction, and Content-Length. 
 //You also set the HTTP method and HTTP body
 NSString *msgLength = 
 [NSString stringWithFormat:@"%d", [soapMsg length]];
 [req addValue:@"text/xml; charset=utf-8"  
forHTTPHeaderField:@"Content-Type"];
 [req addValue:@"http://tempuri.org/PickPill" 
forHTTPHeaderField:@"SOAPAction"];
 [req addValue:msgLength 
forHTTPHeaderField:@"Content-Length"];
 //---set the HTTP method and body---
 [req setHTTPMethod:@"POST"];
 [req setHTTPBody: [soapMsg dataUsingEncoding:NSUTF8StringEncoding]];



 conn = [[NSURLConnection alloc] initWithRequest:req delegate:self]; //establish the connection with the web service, 
 if (conn) {  //you use the NSURLConnection class together with the request object just created
  webData = [[NSMutableData data] retain];//webData object use to receive incoming data from the web service
 }    

}//End of button clicked event





-(void) connection:(NSURLConnection *) connection //Recive response
didReceiveResponse:(NSURLResponse *) response {
 [webData setLength: 0];
}
-(void) connection:(NSURLConnection *) connection //Repeative call method and append data to webData
 didReceiveData:(NSData *) data {
 [webData appendData:data];
}

-(void) connection:(NSURLConnection *) connection//If error occure error should be displayed  
  didFailWithError:(NSError *) error {
 [webData release];
    [connection release];
}


-(void) connectionDidFinishLoading:(NSURLConnection *) connection {
    NSLog(@"DONE. Received Bytes: %d", [webData length]);
    NSString *theXML = [[NSString alloc] 
                        initWithBytes: [webData mutableBytes] 
                        length:[webData length] 
                        encoding:NSUTF8StringEncoding];
    //---shows the XML---
    NSLog(theXML);

    [connection release];
    [webData release];
}



- (void)didReceiveMemoryWarning {
 // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

 // Release any cached data, images, etc that aren't in use.
}

- (void)viewDidUnload {
 // Release any retained subviews of the main view.
 // e.g. self.myOutlet = nil;
}


- (void)dealloc {
 [Me_id release];
 [Creation_id release];
 [Mem_device_id release];
 [Test_datetime release];
 [PillBayNo release];
    [soapResults release];
    [super dealloc];
}

@end

Я сделал все, как показано на сайте, и когда я собрал приложение, оно успешно создало но в окне отладки я вижу

(gdb) continue
2010-03-17 09:09:54.595 ConsumePillService[6546:20b] <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><PickPill xml1ns="http://tempuri.org/"><Me_id>A00000004303</Me_id><Mem_device_id>1011</Mem_device_id><Test_datetime>03/13/2010 07:34:38</Test_datetime><Creation_id>Hboxdata</Creation_id><PillBayNo>2</PillBayNo></PickPill></soap:Body></soap:Envelope>
(gdb) continue
(gdb) continue
(gdb) continue
2010-03-17 09:10:05.411 ConsumePillService[6546:20b] DONE. Received Bytes: 476
2010-03-17 09:10:05.412 ConsumePillService[6546:20b] <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><soap:Fault><faultcode>soap:Server</faultcode><faultstring>Server was unable to process request. ---&gt; One or more errors occurred during processing of command.

ORA-00936: missing expression</faultstring><detail /></soap:Fault></soap:Body></soap:Envelope>

Это должно вернуть мне истину, если все в порядке Что это за ошибка ORA-00936 все о

как не выпускается с веб-сервисом

Пожалуйста, помогите мне решить эту проблему

Заранее спасибо, Вайбхав Дешпанде

...