我在asp.net中看到了许多使用WCF的json web服务的例子,它们接受一个参数。我需要我的服务方法接受许多参数并返回像这样的列表;使用复杂参数调用.net web服务
这是我Service.svc:
public class Car
{
public string Title;
public int Number;
}
[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class Service
{
[OperationContract]
[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)]
public List<Car> GetCarById(int userid, string password , List<Cars> carlist)
{
//Doing some stuff here
}
}
在我的web.config:
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="ServiceAspNetAjaxBehavior">
<enableWebScript />
</behavior>
</endpointBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
<services>
<service name="Service">
<endpoint address="" behaviorConfiguration="ServiceAspNetAjaxBehavior"
binding="webHttpBinding" contract="Service" />
</service>
</services>
</system.serviceModel>
我怎么能调用这个服务,如果我想通过这些参数?当我尝试使用params userid,password和carlist调用方法时,它们都是null。这是我在一个名为Fiddler应用程序中使用POST发送到http://localhost/Service.svc/GetCarById:
HEADERS:
Host: localhost
Content-Length: 136
Content-Type: application/json; charset=utf-8
BODY:
{"d":{"password":"test","userid":123,"carlist":[{"__type":"Car","Number":1,"Title":"BMW"},{"__type":"Car","Number":2,"Title":"Honda"}]}}
的响应是:{“d”:空}该方法返回卡洛斯,所以我知道该方法被调用和卡洛斯是空值。如果我改变方法返回一个字符串,例如“错误”我得到了回来,所以我知道这种方法被称为..
你知道我在做什么错了吗?
看到您发送的JSON绝对有帮助,但问题仍然是缺少一个关键部分 - 您用来打电话的客户端JavaScript代码。你确定知道你的服务方法实际上被称为?你如何获得你发送的JSON? – 2009-09-21 17:56:00
是的,我使用Fiddler来测试该方法。用一些信息更新了原始问题。啊哈,看不出有什么问题!谢谢你帮助我! :-) – Martin 2009-09-21 18:18:54
终于搞定了,见最后一个答案.. – Martin 2009-09-21 18:53:55