1

当我在 Soap 服务的 wsdl 上使用从 SUDZC 生成的 LoginHandler 时,我只会看到以下输出:

Login returned the value: OK

但是,当我启用 service.logging 时,我会得到以下输出:

<soap:Body>
  <LoginResponse xmlns="http://tempuri.org/">
     <LoginResult>OK</LoginResult>
     <authToken>
        <InnerToken>21017998-02fd-4ac9-b132-98c0cb2fd1bf</InnerToken>
     </authToken>
  </LoginResponse>

我需要获取 InnerToken 值并将其保留以供后续 SOAP 调用使用(即需要将其添加到 service.headers 成员中)。关于如何从上述结果中获取 InnerToken 的任何想法?

我正在使用以下 LoginHandler 代码片段。

- (void) LoginHandler: (id) value {
  // Handle errors
  if([value isKindOfClass:[NSError class]]) {
    NSLog(@"%@", value);
    return;
  }
  // Handle faults
  if([value isKindOfClass:[SoapFault class]]) {
    NSLog(@"%@", value);
    return;
  }
  // Do something with the NSString* result
  NSString* result = (NSString*)value;
  NSLog(@"Login returned the value: %@", result);
}
4

1 回答 1

0

在(生成的)SoapRequest.m 文件中,我更改了以下内容:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    ...
    if(self.handler != nil && [self.handler respondsToSelector: self.action]) {
        objc_msgSend(self.handler, self.action, output);
}

进入:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    ...
    if(self.handler != nil && [self.handler respondsToSelector: self.action]) {
        objc_msgSend(self.handler, self.action, element);
}

这解决了我的问题!

于 2013-03-27T15:30:19.880 回答