Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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
Jquery 向WCF服务传递参数时出现内部服务器错误_Jquery_Ajax_Json_Wcf_.net 3.5 - Fatal编程技术网

Jquery 向WCF服务传递参数时出现内部服务器错误

Jquery 向WCF服务传递参数时出现内部服务器错误,jquery,ajax,json,wcf,.net-3.5,Jquery,Ajax,Json,Wcf,.net 3.5,我在搞我的第一个WCF服务,我在传递参数时遇到了问题 我的jQuery ajax调用如下所示 $.ajax({ type : 'POST', async : true, url : 'Service2.svc/GetStats', contentType: 'application/json; charset=utf-8', data : '{ i : 12 }', dataType: 'json', success

我在搞我的第一个WCF服务,我在传递参数时遇到了问题

我的jQuery ajax调用如下所示

$.ajax({
    type    : 'POST',
    async   : true,
    url     : 'Service2.svc/GetStats',
    contentType: 'application/json; charset=utf-8',
    data    : '{ i : 12 }',
    dataType: 'json',
    success : function(result) {
        //success routine...
    }
});
添加我的服务代码就像

<OperationContract()> _
<WebInvoke(ResponseFormat:=WebMessageFormat.Json, RequestFormat:=WebMessageFormat.Json)> _
Public Function GetStats(ByVal i As Integer) As Results
    Dim returnValue As New Results
    returnValue.iValue1 = 10
    returnValue.iValue2 = 20
    returnValue.sMessage = "You executed " + "sdfsd"
    Return returnValue
End Function
_
_
公共函数GetStats(ByVal i为整数)作为结果
将返回值设置为新结果
returnValue.iValue1=10
returnValue.iValue2=20
returnValue.sMessage=“您执行了”+“sdfsd”
返回值
端函数
Results
类是一个非常简单的holder类,包含两个整数和一个字符串

如果我从
GetStats
中删除参数,并从$.ajax对象中删除相应的
data
属性,则此服务工作正常-我可以访问客户端上的三个返回值

当包含参数
i
时,我得到一个
内部服务器错误
状态:500


我猜我的服务函数中缺少了一个属性或什么?

您正在尝试以字符串形式发送数据。您必须将其作为对象发送

data    : { i : 12 },

嗯。它在这方面不起作用

试试这个

data: 'i=12';
像这样更改您的服务,然后重试

<OperationContract()> _
<WebInvoke(ResponseFormat:=WebMessageFormat.Json, RequestFormat:=WebMessageFormat.Json)> _
Public Function GetStats(ByVal i As String) As Results
    Dim returnValue As New Results
    returnValue.iValue1 = 10
    returnValue.iValue2 = 20
    returnValue.sMessage = "You executed " + "sdfsd"
    Return returnValue
End Function
_
_
公共函数GetStats(ByVal i作为字符串)作为结果
将返回值设置为新结果
returnValue.iValue1=10
returnValue.iValue2=20
returnValue.sMessage=“您执行了”+“sdfsd”
返回值
端函数
您应该这样做

var data = { i : 12 };

$.ajax({
    type    : 'POST',
    async   : true,
    url     : 'Service2.svc/GetStats',
    contentType: 'application/json; charset=utf-8',
    data    : data,
    dataType: 'json',
    success : function(result) {
        //success routine...
    }
});

您正在以字符串形式发送数据,而它应该是一个对象

感谢您的响应

我花了一段时间和这个摔跤,我需要做的就是

        data    : '{"i" : 12}' ,  //Object name i in double-quotes
因此,与其他一些建议相反,我确实希望将JSON作为字符串传递。(我想人们真的应该利用这样一个图书馆来做这件事)

然而,我只能在找到实际错误之后才能发现这一点。我是通过将这段代码扔进我的
web.config
文件来实现的

<system.diagnostics>
  <sources>
    <source name="System.ServiceModel" switchValue="Warning, ActivityTracing"
      propagateActivity="true">
      <listeners>
        <add type="System.Diagnostics.DefaultTraceListener" name="Default">
          <filter type="" />
        </add>
        <add name="ServiceModelTraceListener">
          <filter type="" />
        </add>
      </listeners>
    </source>
  </sources>
  <sharedListeners>
    <add initializeData="app_tracelog.svclog"
      type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, 
        Culture=neutral, PublicKeyToken=b77a5c561934e089"
        name="ServiceModelTraceListener" traceOutputOptions="Timestamp">
      <filter type="" />
    </add>
  </sharedListeners>
</system.diagnostics>


它应该使用SvcConfigEditor.exe生成——我在锁定的机器上找不到它。但仅仅是将它粘贴到中似乎就行了——并在我的开发文件夹中给了我一个日志文件——这实际上告诉了我错误的性质。

@ElRonnoco我不熟悉vb,但您的ajax调用没有问题。你有没有试过用paremter静态呼叫你的服务?应该有一个语法错误,或者是st.@ElRonnoco,我想,嗯,你是通过js发送数据的。所以整数变成了字符串。您正试图将参数设置为整数。可能您必须将参数作为字符串获取,然后在方法中将其转换为整数。
'i=12'
不起作用。抱歉。静态(在VB中共享)从Page Init事件中调用work。将参数类型更改为
对象
也会产生相同的错误…将参数类型更改为字符串。如果仍然不行,我就回家:P汉克斯·利特利安,你可以回家:(