0
我有2個SOAP服務需要從IPad應用調用。調用SOAP服務時Objective-C中的錯誤回調
一個用來登錄(SecurityASMX)用戶,另一種是一個返回當前用戶名(SecuredCalls)一次登錄。
我可以用下面的代碼調用SecurityASMX沒有問題。異步調用回調操作:
- (IBAction) OnButtonClick:(id) sender {
bindingSecurity = [[SecurityASMXSvc SecurityASMXSoapBinding] initWithAddress:@"http://myserver/Azur.IPADTest.Web.Services/public/Security.asmx"];
bindingSecurity.logXMLInOut = YES;
SecurityASMXSvc_Login *requestLogin = [[SecurityASMXSvc_Login alloc] init];
requestLogin.strUsername = @"test";
requestLogin.strPassword = @"testpass";
[bindingSecurity LoginAsyncUsingParameters:requestLogin delegate:self];
[requestLogin release];
self.label.text = @"Login in progress";
}
- (void) operation:(SecurityASMXSoapBindingOperation *)operation completedWithResponse:(SecurityASMXSoapBindingResponse *)response
{
[NSThread sleepForTimeInterval:2.0];
self.label.text = @"Login Done!";
}
這工作得很好。
但是,在相同的代碼文件中,我有一個綁定到我的第二個Web服務以返回用戶名與下面的代碼。異步調用回調operationSecure:
- (IBAction) OnButtonSecureCallClick:(id) sender {
bindingSecuredCalls = [[SecureCallsSvc SecureCallsSoapBinding] initWithAddress:@"http://myserver/Azur.IPADTest.Web.Services/private/SecureCalls.asmx"];
bindingSecuredCalls.logXMLInOut = YES;
SecureCallsSvc_ReturnUserName *requestReturnUserName = [[SecureCallsSvc_ReturnUserName alloc] init];
[bindingSecuredCalls ReturnUserNameAsyncUsingParameters:requestReturnUserName delegate:self];
[requestReturnUserName release];
self.label.text = @"Get UserName In Progress";
}
- (void) operationSecure:(SecureCallsSoapBindingOperation *)operation completedWithResponse:(SecureCallsSoapBindingResponse *)response
{
[NSThread sleepForTimeInterval:2.0];
self.label.text = @"Get Username Done!";
}
的問題是,當調用ReturnUserName回報,被調用的方法是一個用於登錄(操作),而不是一個我想要的( operationSecure)。
如何告訴我的第二個webservice綁定調用第二個回調?
謝謝!
是的,似乎我可以傳遞一個委託給請求,但是我在這兩種情況下都傳遞_self_。我無法傳遞_self.operationSecure_編譯器不會讓我這樣做。 – alexbf
這是委託參數,而不是回調方法參數。如果API允許你改變它,那麼可能會有一個方法需要一個選擇器,並可能被命名爲setCompletedWithResponseSelector或類似的。如果不是,你必須遵循我給出的答案。 – InsertWittyName
它看起來不像我可以改變選擇器(回調方法?)。我用我的肥皂調用wsdl2objc。它調用回調的行是:'[delegate operation:self completedWithResponse:response];'。它看起來像它可以有一個不同的選擇器? – alexbf