1

サーバーでホストされている WCF サービスを使用するための Ajax。クロスドメインリクエストを使用するために、JQMの次のフラグを既に構成して許可しています。

$.support.cors = true;
$.mobile.allowCrossDomainPages = true;

同じコードが Android エミュレーターとデバイスで動作しています。また、IOS アプリの Phonegap の config.xml ファイルで URL を許可しました。

また、Safari と IOS エミュレーターで同じ HTML ページを閲覧できます。両方の Web サービスで正常に動作しています。この問題は、iOS エミュレーターまたはデバイスで phonegap アプリをビルドして実行すると発生します。サービスは呼び出されず、$.ajax の成功コールバックが呼び出されます。成功した応答を確認したところ、Web サービス URL ページ (.svc) の HTML が返されていることがわかりました。

次のコードを使用して、$.ajax を使用して SVC を呼び出しました

var soapRequest = '<?xml version="1.0" encoding="utf-8"?>'
                                    + '<soap:Envelope      xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">'
                                      + '<soap:Body>'
                                       + '<SignIn xmlns="http://tempuri.org/">'
                                          + '<UserName>' + $.trim($('#txtEmail').val()) + '</UserName>'
                                         + '<Password>' + $.trim($('#txtPassword').val()) + '</Password>'
                                         + '<DeviceDetails>' + GetDeviceInfo() + '</DeviceDetails>'
                                      + '</SignIn>'
                                     + '</soap:Body>'
                                   + '</soap:Envelope>';
            $.ajax({
                beforeSend: function (xhr) {
                    ShowLoading('Please wait...');
                    xhr.setRequestHeader("SOAPAction", "http://tempuri.org/IService/SignIn");
                }, //Show spinner
                complete: function () {
                    HideLoading();
                }, //Hide spinner
                url: "http://somedomain/service.svc",
                type: "POST",
                dataType: "xml",
                data: soapRequest,
                contentType: "text/xml; charset=\"utf-8\"",
                success: function (rcvdata, status) {
                   alert(rcvdata);  // THIS IS GIVING HTML OF SERVICE PAGE
                },
                error: function (request, status, error) {
                   alert(request + "\n" + status + "\n" + error);
                    HideLoading();
                }
            });

また、AJAX の async および processdata オプションの値を変更することに結び付けましたが、常に svc サービス ページの html を返します。Ajax リクエストのステータスは常に 200 です。

この問題は Phonegap IOS アプリでのみ発生します。IOS エミュレータ ブラウザで HTML ページを直接開くと、サービスが正常に呼び出され、有効な SOAP 応答が返されました。

私はPhonegap 2.8.1を使用しており、2.9.0でも試しました

前もって感謝します。

編集 - - - - - - -

IIS で WCF サービスのローカル環境をホストすると、正常に動作し、サービスから応答を受け取りました。また、ローカル サーバーとライブ サーバーの IIS 設定を確認して比較しました。どちらも同じ

4

0 に答える 0