0

JSON-RPC bridge を使用して ASIHTTPRequest ライブラリを使用して、Objective-C 環境からアクセスできる SOAP Web サービスを作成しました。JavaScript からテストしたところ、すべて問題ありませんでした。しかし、Objective-C からエラーが発生しました

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

ウェブサービス:

@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();
}

Objective-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];
}
4

1 に答える 1

1

ASIHTTPRequest インスタンスrequestは自動解放されます。つまり、-clickDownloadButton:メソッドが終了するとすぐに割り当てが解除され、セッションが早期に終了する可能性があります。

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

于 2011-02-25T21:54:29.380 に答える