2014-02-27 88 views
0

當我使用參數調用Web服務方法時,出現此錯誤:「Web服務調用無效,參數缺失值」。無效的Web服務調用,缺少asmx web服務參數的值

我使用一個沒有返回相同類型的對象的參數的Web服務方法進行測試,它運行良好。

這裏是我的web服務方法:

[WebMethod] 
    [ScriptMethod(UseHttpGet = true)] 
    public ResponseStatistic_3 Statistic_3(string klant) 
    { 
      Statistic_3[] items = Helper.Helper_Statistic_3(klant).ToArray(); 
      ResponseStatistic_3 response = new ResponseStatistic_3(items); 


      return response; 
    } 

這裏是我的javascript代碼,我檢索KLA變量物有所值:

function getStatistic3() { 

var response; 
var allstat3 = []; 
var kla = $('#Select1').val(); 
var dataJSon = { klant: kla } 

if (kla) { 
    $.ajax({ 
     type: 'GET', 
     url: 'http://localhost:52251/Service1.asmx/Statistic_3', 
     data: dataJSon, 
     contentType: 'application/json; charset=utf-8', 
     dataType: 'json', 
     processData: false, 
     success: function (msg) { 
      response = msg.d; 
      for (var i = 0; i < response.Items.length; i++) { 
       var j = 0; 
       allstat3[i] = [response.Items[i].Interventie, response.Items[i].Sum[j], response.Items[i].Sum[++j], response.Items[i].Sum[++j], response.Items[i].Sum[++j], response.Items[i].Sum[++j]]; 
      } 
      fillDataTable(allstat3); 
     }, 
     error: function (e) { 
      alert("error loading statistic 3"); 
     } 
    }); 
} else { 
    alert("statistic 3 null"); 
} 
} 

我與JSON.stringify測試過( {klant:kla})和我有同樣的錯誤。

我看了幾個論壇,但徒勞無功。 有什麼問題?

+2

僅供參考,您並未使用WCF,而是使用ASMX。 ASMX是一項傳統技術,不應該用於新開發。 WCF或ASP.NET Web API應該用於Web服務客戶端和服務器的所有新開發。一個暗示:微軟已經在MSDN上退役了[ASMX Forum](http://social.msdn.microsoft.com/Forums/en-US/asmxandxml/threads)。 –

+0

我知道,我從wcf開始,但我有一個問題,我幾天無法解決。藉助asmx,我可以很快解決這個問題。謝謝你加油...... – Jayce

+1

如果你只是把它作爲字符串發送('data:「klant ='test'」'),會發生什麼?它通過了嗎? –

回答

1

您的webservice方法需要一個字符串參數,但您發送客戶對象的JSON表示。我認爲內建的JavaScriptSerializer試圖反序列化你的參數並導致錯誤。我調整在下面的示例代碼:

function getStatistic3() { 

var response; 
var allstat3 = []; 

    $.ajax({ 
     type: 'GET', 
     url: 'http://localhost:52251/Service1.asmx/Statistic_3', 
     data: $('#Select1').val(), 
     dataType: 'json', 
     processData: false, 
     success: function (msg) { 
      response = msg.d; 
      for (var i = 0; i < response.Items.length; i++) { 
       var j = 0; 
       allstat3[i] = [response.Items[i].Interventie, response.Items[i].Sum[j], response.Items[i].Sum[++j], response.Items[i].Sum[++j], response.Items[i].Sum[++j], response.Items[i].Sum[++j]]; 
      } 
      fillDataTable(allstat3); 
     }, 
     error: function (e) { 
      alert("error loading statistic 3"); 
     } 
    }); 
} 

Webservice的方法

[WebMethod] 
[ScriptMethod(UseHttpGet = true)] 
public ResponseStatistic_3 Statistic_3(string klant) 
{ 
     Statistic_3[] items = Helper.Helper_Statistic_3(klant).ToArray(); 
     ResponseStatistic_3 response = new ResponseStatistic_3(items); 
     return response; 
} 
+0

我有同樣的錯誤:s – Jayce

+0

沒關係,這很奇怪。我從請求中刪除了contentType標頭,因爲修改過的請求沒有發送任何json到服務器,你可以再試一次嗎? –

+0

您可以將「type」屬性更改爲「POST」並查看是否有幫助?這些舊的asmx服務存在一些常見問題。 PageMethods也發生這種問題(幾乎相同),它們只接受POST請求。 –

1

您需要字符串化參數sefore透過JSON.stringify()方法將其發送到Web服務。

function getStatistic3() { 

var response; 
var allstat3 = []; 
var kla = $('#Select1').val(); 
**var dataJSon = JSON.stringify({ klant: kla })** 

if (kla) { 
    $.ajax({ 
     type: 'GET', 
     url: 'http://localhost:52251/Service1.asmx/Statistic_3', 
     data: dataJSon, 
     contentType: 'application/json; charset=utf-8', 
     dataType: 'json', 
     processData: false, 
     success: function (msg) { 
      response = msg.d; 
      for (var i = 0; i < response.Items.length; i++) { 
       var j = 0; 
       allstat3[i] = [response.Items[i].Interventie, response.Items[i].Sum[j], response.Items[i].Sum[++j], response.Items[i].Sum[++j], response.Items[i].Sum[++j], response.Items[i].Sum[++j]]; 
      } 
      fillDataTable(allstat3); 
     }, 
     error: function (e) { 
      alert("error loading statistic 3"); 
     } 
    }); 
} else { 
    alert("statistic 3 null"); 
} 
}