2011-02-08 6 views
0

JSON-RPCブリッジを使用してASIHTTPRequestライブラリを使用してObjective-C環境からアクセスできるSOAP Webサービスを作成しました。 JavaScriptからすべての部分をテストしたところOKでした。しかし、Objective-Cのから、私はエラーを得たメソッドが見つかりませんasihttprequestを使用してWebサービスにアクセス中

{"id":2,"error":{"code":591,"msg":"method not found (session may have timed out)"}} 

Webサービス:

@WebService() 
public class UserWS { 

/** 
* User data list - id, first name, last name, service number, username 
*/ 
/** 
* Provides web service to get current user with waiter role data. 
*/ 
@WebMethod(operationName = "getUsers") 
public String[][] getUsers() { 
    String[][] userDara = null; 
    try { 
     Context context = POSNamingService.getContext(); 
     Users us = (Users) context.lookup("business.Users"); 
     List<User> users = us.getWaiterUsers(); 
     userDara = new String[users.size()][5]; 
     for (int i = 0; i < userDara.length; i++) { 
      User user = users.get(i); 
      userDara[i][0] = String.valueOf(user.getUserNo()); 
      userDara[i][1] = user.getFirstName(); 
      userDara[i][2] = user.getLastName(); 
      userDara[i][3] = user.getServiceNo(); 
      userDara[i][4] = user.getLogin(); 
     } 
    } catch (NamingException ex) { 
     Logger.getLogger(UserWS.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    return userDara; 
} 

ブリッジクラス:

public class Bridge { 

private UserWS userWS = new UserWS(); 

public String[][] getUsers(int i) { 
    return userWS.getUsers(); 
} 

Objecitive-C側:

(IBAction)clickDownloadButton:(id)sender { 
NSURL *url = [NSURL URLWithString:@"http://10.200.0.24:1445/TestRPC-war/JSONRPC"]; 
ASIHTTPRequest *request = [[[ASIHTTPRequest alloc] initWithURL:url] autorelease]; 
NSString *sendData = [NSString stringWithFormat:@"{\"method\": \"getUsers\"}"]; 
request appendPostData:[sendData dataUsingEncoding:NSUTF8StringEncoding]]; 
[request setRequestMethod:@"GET"]; 
[request setDelegate:self]; 
[request setDidFailSelector:@selector(requestWentWrong:)]; 
[request setTimeOutSeconds:60]; 
[request startAsynchronous]; 
} 

答えて

1

あなたASIHTTPRequestインスタンスrequestはutoreleased。これは、あなたの-clickDownloadButton:メソッドが終了するとすぐに割り当てが解除されることを意味し、おそらくあなたのセッションを早期に終了させるでしょう。

代わりにrequestをインスタンス変数にして、ここでメソッド内に割り当てます(ただし、自動解放しないでください)。要求が完了したら解放してください。

+0

さらに、必要に応じて、タイプASINetworkQueueのインスタンス変数を作成することもできます。 – SlowTree

関連する問題