使用 asihttprequest 访问 Web 服务时未找到方法错误
Posted
技术标签:
【中文标题】使用 asihttprequest 访问 Web 服务时未找到方法错误【英文标题】:method not found error while accessing web service using asihttprequest 【发布时间】:2011-02-08 11:27:27 【问题描述】:我创建了 SOAP Web 服务,该服务可以从 Objective-C 环境中使用 JSON-RPC 桥的 ASIHTTPRequest 库进行访问。 当我从 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];
【问题讨论】:
【参考方案1】:您的 ASIHTTPRequest 实例 request
已自动释放。这意味着它会在您的 -clickDownloadButton:
方法结束后立即被释放,这可能会提前终止您的会话。
相反,您应该将request
设为实例变量,在此处在您的方法中分配它(但不要自动释放它),然后在请求完成时释放它。
【讨论】:
或者更好的是,如果需要,您可以创建 ASINetworkQueue 类型的实例变量。以上是关于使用 asihttprequest 访问 Web 服务时未找到方法错误的主要内容,如果未能解决你的问题,请参考以下文章