IPadアプリケーションから呼び出すSOAPサービスが2つあります。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!";
}
:非同期呼び出しのコールバックは操作です。
しかし、同じコードファイルで、私は次のコードでユーザー名を返すように2番目の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する際に、呼び出されるメソッドは、ログイン(操作)用とない私が欲しい1(であるということですオペレーション)。
第2コールバックを呼び出すために2番目のWebサービスバインディングをどのように伝えることができますか?
ありがとうございます!
はい、私は要求に代理人を渡すことができるようですが、どちらの場合も_self_を渡します。コンパイラは私にそれをさせません。 – alexbf
これは代理パラメータであり、コールバックメソッドパラメータではありません。 APIがあなたにそれを変更することを許すならば、おそらくセレクターを取るメソッドがあり、おそらくsetCompletedWithResponseSelectorまたはそれに類似した名前です。そうでなければ、私が与えた答えに従わなければならないでしょう。 – InsertWittyName
セレクタ(コールバックメソッド?)を変更することはできません。私はsoap呼び出しにwsdl2objcを使用します。コールバックを呼び出す行は、 '[デリゲート操作:self completedWithResponse:レスポンス];'です。別のセレクタを持つように見えますか? – alexbf