Jquery 向WCF服务传递参数时出现内部服务器错误
我在搞我的第一个WCF服务,我在传递参数时遇到了问题 我的jQuery ajax调用如下所示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
$.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汉克斯·利特利安,你可以回家:(