Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# web服务调用无效,asmx web服务的参数缺少值_C#_Asp.net_Web Services_Asmx - Fatal编程技术网

C# web服务调用无效,asmx web服务的参数缺少值

C# web服务调用无效,asmx web服务的参数缺少值,c#,asp.net,web-services,asmx,C#,Asp.net,Web Services,Asmx,我有以下错误:“无效的web服务调用,当我使用参数调用web服务方法时,参数缺少值。” 我正在使用一个不带参数的web服务方法进行测试,该方法返回相同类型的对象,并且运行良好 以下是我的web服务方法: [WebMethod] [ScriptMethod(UseHttpGet = true)] public ResponseStatistic_3 Statistic_3(string klant) { Statistic_3[] items =

我有以下错误:“无效的web服务调用,当我使用参数调用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");
}
}
函数getStatistic3(){ var反应; var allstat3=[]; var kla=$('#Select1').val(); var dataJSon={klant:kla} if(kla){ $.ajax({ 键入:“GET”, 网址:'http://localhost:52251/Service1.asmx/Statistic_3', 数据:dataJSon, contentType:'application/json;charset=utf-8', 数据类型:“json”, processData:false, 成功:功能(msg){ 响应=msg.d; 对于(var i=0;i 我也在用JSON.stringify({klant:kla})进行测试,我有同样的错误

我看了几个论坛,但都没看到。
怎么了?

您的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");
        }
    });
}

在使用JSON.stringify()方法将参数发送到web服务之前,需要对其进行字符串化

函数getStatistic3(){ var反应; var allstat3=[]; var kla=$('#Select1').val(); **var dataJSon=JSON.stringify({klant:kla})** if(kla){ $.ajax({ 键入:“GET”, 网址:'http://localhost:52251/Service1.asmx/Statistic_3', 数据:dataJSon, contentType:'application/json;charset=utf-8', 数据类型:“json”, processData:false, 成功:功能(msg){ 响应=msg.d; 对于(var i=0;iFYI,您使用的不是WCF,而是ASMX。ASMX是一种遗留技术,不应用于新的开发。WCF或ASP.NET Web API应用于Web服务客户端和服务器的所有新开发。一个提示:微软已经退出了MSDN。我知道,我是从wcf开始的,但我有一个问题,好几天都无法解决。有了asmx,我可以很快解决这个问题。感谢您的欢呼……如果您只是将其作为字符串发送(
数据:“klant='test'”
),会发生什么?它通过了吗?@Jayce:你应该问你的WCF问题。“我们的答案比在新的开发中使用传统技术,然后再被它们束缚要好得多。@Jayce。”。伟大的看看@Rob Angelier的答案。我认为这看起来没问题。尽管您可能需要执行类似于
数据的操作:“klant=”+$(“#Select1”).val()+“
好吧,这很奇怪。我从请求中删除了contentType头,因为修改后的请求没有向服务器发送任何json,您能再试一次吗?您能将“type”属性更改为“POST”并看看这是否有帮助吗?这些旧的asmx服务存在一些常见问题。PageMethods也会出现这个问题(几乎相同),它们只接受POST请求。我找到了grace@SimonC-->数据:“klant=”+$(“#Select1”).val()+”“也感谢您的帮助。
[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;
}
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");
}
}