我正在搞乱我的第一个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
Results
类是一个非常简单的持有者类,两个整数和一个字符串。
如果从GetStats
中删除参数并从$ .ajax对象中删除相应的data
属性,此服务正常工作 - 我可以访问客户端上的三个返回值。
如果包含参数i
,我会获得Internal Server Error
状态:500。
我猜我错过了我的服务功能中的属性或其他内容?
答案 0 :(得分:1)
您正在尝试将数据作为字符串发送。你必须把它作为一个对象发送。
data : { i : 12 },
UMM。它不起作用。
试试这个。
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
答案 1 :(得分:1)
感谢您的回复。
我花了一些时间与这个摔跤,我需要做的就是...
data : '{"i" : 12}' , //Object name i in double-quotes
与其他一些建议相反,我做想要将JSON作为字符串传递。 (我想人们应该真正使用Crockford's 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>
我是从mkdot.net得到的,它应该真的是使用SvcConfigEditor.exe生成的 - 我在锁定的机器上找不到它。但只是粘贴它似乎工作 - 并在我的开发文件夹中给了我一个日志文件 - 这实际上告诉我错误的性质。
答案 2 :(得分:0)
你应该做
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...
}
});
您将数据作为字符串发送,而它应该是一个对象