2012-11-13 51 views
2

我已經搜索了這個,我一直沒有找到可以幫助我的東西,所以我appologise,如果這已發佈,我剛剛無法找到它。使用JQuery Mobile的WCF服務正在返回一個400錯誤的請求

我已經創建了一個在IIS中託管的WCF服務應用程序。目前它的基礎只是一個hello世界方法,基本上是將國家名稱及其代碼作爲json對象返回。

我也寫了一些jquery,將遠程調用該方法的目的是填充列表對象。

目前當我調用方法時,它會觸發ajax調用的成功參數並以「undefined」提醒我我不知道是什麼造成了這種情況,但它最有可能犯了一個愚蠢的錯誤。

繼承人的服務和jQuery

web配置的代碼:

<configuration> 

<system.web> 
<compilation debug="true" targetFramework="4.0" /> 
<authentication mode="None" /> 
</system.web> 
<system.webServer> 
<modules runAllManagedModulesForAllRequests="true"/> 
</system.webServer> 
<system.serviceModel> 
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> 
<standardEndpoints> 
    <webScriptEndpoint> 
    <standardEndpoint crossDomainScriptAccessEnabled="true"/> 
    </webScriptEndpoint> 
</standardEndpoints> 

</system.serviceModel> 


</configuration> 

service1.svc

<%@ ServiceHost Language="C#" Debug="true" Service="RestfulFlightWCF.Service1" codeBehind="Service1.svc.cs" Factory="System.ServiceModel.Activation.WebScriptServiceHostFactory" %> 

service1.svc.cs {// 注意:可以使用「重構」菜單上的「重命名」命令將代碼,svc和配置文件中的類名稱「Service1」一起更改。

[ServiceContract(Namespace = "JsonpAjaxService")] 
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
public class Service1 
{ 
    [WebGet(ResponseFormat = WebMessageFormat.Json)] 
    public Country GetCountry(string id) 
    { 

     Country county = new Country(); 
     county.Name = "United Kingdom"; 
     county.Id = "gb"; 
     return county; 
    } 

    [DataContract] 
    public class Country 
    { 
     [DataMember] 
     public string Id { get; set; } 

     [DataMember] 
     public string Name { get; set; } 
    } 

} 

jQuery的

$(document).ready(
    function() { 
     $.ajax({ 
      type:"GET", 
      Data:'gb', 
      Url:"http://192.168.1.6:80/FlightServices.svc/GetCountry", 
      DataType:"jsonp", 
      method:"GetCountry", 
      success: function(msg){ 
       debugger; 
        alert(msg.responseText); 
         if (msg.responseText) { 
          var err = msg.responseText; 
          if (err) 
           error(err); 
          else 
           error({ Message: "Unknown server error." }) 
         } 
      }, 
      failure: function(){ 
       alert("something went wrong"); 
      }, 
      error: function(){ 
       alert("something happned"); 
      } 
     }); 
     }); 

對不起,長職位,但我認爲這將有助於如果我包括我的代碼。

+0

看的好像你是不是序列化您的數據json –

+0

可能是一個愚蠢的問題,但我累了,不能思考直。那是在ajax調用還是在wcf服務中,我將不得不序列化它? – gilljoy

+0

在你返回縣之前,你需要將它序列化成json ... –

回答

0

好的所以我今晚在擺弄了一段時間之後纔開始工作,所以我想我會在發現一些我發現的東西的同時尋找修復。

  1. 在響應格式中添加所調用方法的WebGet。

    [WebGet(ResponseFormat= WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)] 
    
  2. 改變了我的jQuery以下幾點:

    var Type; 
    var Url; 
    var Data; 
    var ContentType; 
    var DataType; 
    var ProcessData; 
    var method; 
    //Generic function to call WCF Service 
    function CallService() { 
        $.ajax({ 
         type: Type, //GET or POST or PUT or DELETE verb 
         url: Url, // Location of the service 
         data: Data, //Data sent to server 
         contentType: ContentType, // content type sent to server 
         dataType: DataType, //Expected data format from server 
         processdata: ProcessData, //True or False 
         success: function (msg) {//On Successful service call 
          ServiceSucceeded(msg); 
         }, 
         error: ServiceFailed// When Service call fails 
        }); 
    } 
    
    function ServiceFailed(xhr) { 
        alert(xhr.responseText); 
        if (xhr.responseText) { 
         var err = xhr.responseText; 
         if (err) 
          error(err); 
         else 
          error({ Message: "Unknown server error." }) 
        } 
        return; 
    } 
    
    function ServiceSucceeded(result) { 
        if (DataType == "jsonp") { 
    
          debugger; 
          resultObject = result.GetEmployeeResult; 
          var string = result.Name + " \n " + result.Id ; 
          alert(string); 
        } 
    } 
    
    function GetCountry() { 
        Data = {id : "us"}; 
        Type = "GET"; 
        Url = "http://192.168.1.6:80/FlightService.svc/GetCountry"; 
        DataType = "jsonp"; 
        ContentType = "application/json; charset=utf-8"; 
        ProcessData = false; 
        method = "GetCountry"; 
        CallService(); 
    } 
    
    $(document).ready(
    function() { 
    
        GetCountry(); 
    } 
    

關鍵的一點,我發現這是傳遞參數下降到webGet方法

data: {id : "gb"} 
0

它是如何有一個小樣本被送回

public string GetCountry(string id) 
    { 
     string json = string.Empty; 
     Country county = new Country(); 
     county.Name = "United Kingdom"; 
     county.Id = "gb"; 
     json = "{ \"name\" : \"" + county.Name + "\", \"id\" : \"" + county.Id + "\" }" 
     return json; 
    }​ 

硬編碼是一種不好的做法。更好地序列化數據。

+0

我試過用JavaScriptSeriliazer,它仍然返回null ,出於某種原因,當調試jquery時,查看msg變量時,它只包含整個javascript而不是一個json對象,這讓我覺得我現在在做jquery的錯誤 – gilljoy

+0

它仍然返回一個400錯誤的錯誤請求 – gilljoy

0

看起來你可能缺少從XML配置一些配置,包括:

<system.serviceModel> 
    <behaviors> 
    <serviceBehaviors> 
     <behavior> 
     <serviceMetadata httpGetEnabled="true" /> 
     </behavior> 
    </serviceBehaviors> 
    </behaviors> 
<system.serviceModel> 

真的不使用WCF自己,而是通過運行本教程中,它應該包括什麼丟失: http://www.codeproject.com/Articles/417629/Support-for-JSONP-in-WCF-REST-services

+0

Didn似乎沒有工作,認真考慮放棄現在的WCF – gilljoy

相關問題