【问题标题】:Invalid web service call, missing value for parameter with asmx web service无效的 Web 服务调用,缺少 asmx Web 服务的参数值
【发布时间】:2014-02-27 20:08:03
【问题描述】:

当我使用参数调用 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 }) 进行测试,我也遇到了同样的错误。

我查看了几个论坛,但都是徒劳的。 怎么了?

【问题讨论】:

  • 仅供参考,您使用的不是 WCF,而是 ASMX。 ASMX 是一项遗留技术,不应用于新开发。 WCF 或 ASP.NET Web API 应该用于 Web 服务客户端和服务器的所有新开发。一个提示:微软已经在 MSDN 上停用了ASMX Forum
  • 我知道,我是从 wcf 开始的,但是我遇到了一个几天都无法解决的问题。使用 asmx 我可以很快解决这个问题。谢谢你的欢呼...
  • 如果您只是将其作为字符串 (data: "klant='test'") 发送会怎样?它通过了吗?
  • @Jayce:你应该在Stack Overflow 上询问你的 WCF 问题。我们的回答比在新开发中使用遗留技术要好得多,然后被它们困住。
  • @Jayce。伟大的。看看@Rob Angelier 的回答。认为这看起来不错。虽然你可能需要做一些更像data: "klant='" + $('#Select1').val() + "'"

标签: c# asp.net web-services asmx


【解决方案1】:

您的 Web 服务方法需要一个字符串参数,但您发送的是客户对象的 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");
        }
    });
}

网络服务方法

[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;
}

【讨论】:

  • 好吧,这很奇怪。我从请求中删除了 contentType 标头,因为修改后的请求没有向服务器发送任何 json,您可以再试一次吗?
  • 您能否将“type”属性更改为“POST”,看看是否有帮助?这些旧的 asmx 服务存在一些常见问题。这个问题也发生在 PageMethods(几乎相同)他们只接受 POST 请求。
  • 我找到了恩典@SimonC --> data: "klant='" + $('#Select1').val() + "'"
  • 也感谢您的帮助。
【解决方案2】:

您需要将参数字符串化,然后使用 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");
}
}

【讨论】:

    猜你喜欢
    • 2011-09-22
    • 1970-01-01
    • 1970-01-01
    • 2019-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多