为什么异步SOAP Web服务调用不起作用

时间:2011-02-25 07:14:31

标签: cocoa nsrunloop

我使用WSMakeStubs(在开发工具中)生成用于访问SOAP Web服务的存根代码。我对该对象的调用当前只是阻塞。当我尝试使用异步调用时,没有任何反应,我确信它与我对运行循环的理解有关。我初始化一个对象并尝试在这样的运行循环上安排它:

BeginPartnerSession *call = [[BeginPartnerSession alloc] init];
[call setParameters:kPartnerID in_Password:kPartnerPassword];
[call setCallBack:self selector:@selector(sessionIDRequestDidFinish:)];
[call scheduleOnRunLoop:[NSRunLoop currentRunLoop] mode:NSDefaultRunLoopMode];
[call release];

在运行循环上调度的存根调用如下所示:

- (void) scheduleOnRunLoop:(NSRunLoop*) runloop mode:(NSString*) mode
{
  WSMethodInvocationScheduleWithRunLoop([self getRef], [runloop getCFRunLoop], (CFStringRef) mode);
}

对[self getRef]的调用返回一个设置了回调的调用对象。然后回调应该调用我的目标和选择器,但它在调用带有运行循环的调度后永远不会达到该断点。在运行循环调度中需要更改什么才能使其正常工作?

同步调用工作正常,所以我很确定这不是服务器问题。

1 个答案:

答案 0 :(得分:0)

我终于将其分解为一个单独的项目,我可以将问题隔离开来。异步调用在那里工作得很好,这使得runloop对我很怀疑。事实证明这个问题与我将其作为iPhoto的插件运行这一事实有关。我只是改变了runloop模式,所以调用看起来像这样:

[call scheduleOnRunLoop:[NSRunLoop currentRunLoop] mode:NSRunLoopCommonModes];

然后调用了回调。瞧!