wsdl2objc ツールを使用して、objective-c から ASMX Web サービスを使用しようとしています。今のところ、温度変換 Web サービスを消費しようとしています。
このツールを使用して、サービスを利用するためのクライアント クラスが生成されました (このリンクを参考にしてコードを記述しました)。
ただし、「有効なアクション パラメータがないとリクエストを処理できません。有効な SOAP アクションを指定してください」という SOAP エラー メッセージが継続的に表示されます。
このエラー メッセージは、"SOAPAction" ヘッダーを要求ヘッダーに追加する必要があることを非常に明確に示していますが、この場合、この wsdl2objc ツールを使用して Web サービスを使用するためのクライアント クラスを生成するときに、その方法がわかりません。
私は長い間検索してきましたが、参照したすべてのリンクで、objective-c でこの状況が発生しているという言及はありませんでした。
以下の私のコードを確認してください:
- (IBAction)submitClicked:(id)sender {
TempConvertSoap *binding = [TempConvertSvc TempConvertSoap];
TempConvertSoapResponse* response;
TempConvertSvc_CelsiusToFahrenheit* request = [[TempConvertSvc_CelsiusToFahrenheit alloc] init];
request.Celsius = self.txtCelcius.text;
response = [binding CelsiusToFahrenheitUsingParameters:request];
dispatch_async(dispatch_get_main_queue(), ^{
[self processResponse:response];
});
}
-(void) processResponse: (TempConvertSoapResponse *) soapResponse
{
NSArray *responseBodyParts = soapResponse.bodyParts;
id bodyPart;
@try{
bodyPart = [responseBodyParts objectAtIndex:0];
}
@catch (NSException* exception)
{
UIAlertView* alert = [[UIAlertView alloc]initWithTitle:@"Server Error"message:@"Error while trying to process request" delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
[alert show];
return;
}
if ([bodyPart isKindOfClass:[SOAPFault class]]) {
NSString* errorMesg = ((SOAPFault *)bodyPart).simpleFaultString;
UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Server Error" message:errorMesg delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
[alert show];
}
else if([bodyPart isKindOfClass:[TempConvertSvc_CelsiusToFahrenheitResponse class]]) {
TempConvertSvc_CelsiusToFahrenheitResponse* tempResponse = bodyPart;
UIAlertView* alert = [[UIAlertView alloc]initWithTitle:@"Success!" message:[NSString stringWithFormat:@"Result is %@", tempResponse.CelsiusToFahrenheitResult] delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
[alert show];
}
}
このリンクを参照して、石鹸メッセージを手動で作成して呼び出しを行うことで Web サービスを直接消費しようとしましたが、asmx Web ページの HTML を応答として取得しています!! なんでこんな反応が返ってくるのか理解不能!! この段落の冒頭で参照されているリンクにあるこの特定のコード例を実行している間、コードを 1 行も変更していません。
私はiOSプログラミングにまったく慣れていないので、ばかげた間違いをしたり、非常に些細なことを見落としたりしている可能性があります。誰かが親切に助けてくれますか?
さらに情報が必要な場合はお知らせください。
ありがとうございました。
更新:
以下の Priya が示唆するように、setHttpCallUsingBody メソッドの soap アクション ヘッダー項目を確認しました。ただし、すでに設定されていることがわかります。しかし、それでも同じ障害メッセージが表示されます。以下のスクリーン クリップを確認してください。ソープアクションが間違っていませんか?それは何か違うものであるべきですか?