2012-10-17 63 views
1

我正在設計一個Android應用程序使用PhoneGap,它基本上調用一個Web服務,現在它將包含一個方法,返回一些東西(讓我們說一個字符串)作爲返回值。最後,我希望Web服務處理針對我的Windows Azure數據庫的查詢。PhoneGap應用程序和WCF服務在不同的域

我對Web服務的選擇是啓用Ajax的WCF服務。這是正確的選擇嗎?

我試了一個簡單的應用程序,看看它是如何工作的。首先,我在Visual Studio中創建了一個新項目,然後創建了一個啓用Ajax的WCF服務。我添加了一個簡單的方法:

[OperationContract] 
[WebInvoke(Method = "GET", ResponseFormat= WebMessageFormat.Json)] 
public string GetName() 
{ 
    return "Hello world"; 
} 

我根本沒有修改Web.config。

然後,我打開Eclipse並創建了一個只帶有文本框和按鈕的新的PhoneGap Android應用程序。每次,單擊此按鈕,web服務將被調用和返回值會通過以下方法來顯示在文本框中:

$('#button').click(function(){ 
    $.ajax({ 
    type: "GET",  
    url: "http://localhost:11634/MobileService.svc/GetName",  
    contentType: "application/json",  
    dataType: "json", 
    success: function (result) {  
     $("#textbox").text(result);  
    },    
    error: function (textStatus) {  
     $("#textbox").text(textStatus); 
    }  
    }); 
}); 

當我試圖用這個方法,我得到以下錯誤火狐:"NetworkError: 405 Method Not Allowed。然後我嘗試將數據類型更改爲jsonp,並在AJAX調用之前添加以下行以允許跨域請求: $.support.cors = true;。現在在Firefox中,我得到這個錯誤:

​​

能否請您指導我,我是否還是我沒有使用正確的方法和如何處理跨域問題嗎?

回答

2

您需要爲jsonp調用添加回調函數。所以:

$('#button').click(function(){ 
    $.ajax({ 
    type: "GET",  
    url: "http://localhost:11634/MobileService.svc/GetName",  
    dataType: "jsonp", 
    jsonpCallback: "handleResponse", 
    error: function (textStatus) {  
     $("#textbox").text(textStatus); 
    }  
    }); 
}); 

function handleResponse(data) { 
    $("#textbox").text(data);  
} 

看到這個問題:"invalid label" when using JSONP?

正如下面的評論中討論,你需要設置你的MobileService對JSONP迴應稱:

<system.serviceModel> 
    <behaviors> 
    <endpointBehaviors> 
     <behavior name="webHttpBehavior"> 
     <webHttp /> 
     </behavior> 
    </endpointBehaviors> 
    </behaviors> 
    <bindings> 
    <webHttpBinding> 
     <binding name="webHttpBindingWithJsonP" crossDomainScriptAccessEnabled="true" /> 
    </webHttpBinding> 
    </bindings> 
    <services> 
     <service name="ServiceSite.MobileService"> 
     <endpoint address="" binding="webHttpBinding" 
       bindingConfiguration="webHttpBindingWithJsonP" 
       contract="ServiceSite.MobileService" 
       behaviorConfiguration="webHttpBehavior"/> 
    </service> 
    </services> 
</system.serviceModel> 
+0

我仍然得到無效的標籤錯誤,即使我做了一個jsonpCallback。 – user1135357

+0

您可以使用Firefox或Chrome轉到上面的localhost url,然後使用調試器(Firefox中的Firebug或Chrome中的開發人員工具)來顯示JSON響應的外觀?這聽起來像是返回的JSON中有一些無效。 – mccannf

+0

如果響應的格式不是有效的,那麼您的Web.config可能需要更改爲JSONP,或者您可能需要爲該服務創建特定的工廠。請參閱此問題的答案:http://stackoverflow.com/questions/9882857/wcf-4-jsonp-and-jquery-cause-parsererror – mccannf

相關問題