$('#btn4').bind('click', function () {
var did = { ID: 99999, Name: 'aaa' }; $.ajax({ url: uri + 'GetPersonByPerson', type: 'get', dataType: 'jsonp', contentType: "application/json", data: did, cache: false, timeout: 10000, success: function (data) { alert(data.Name); } }); });
前端页面调用wcf接口,入参是引用类型。
[DataContract] public class Person { [DataMember] public int ID { get; set; } [DataMember] public string Name { get; set; } } public interface IServices { [OperationContract] [WebGet(ResponseFormat=WebMessageFormat.Json)] Person GetPersonByPerson(Person person); }
但是wcf接收到请求后,解析不出Person的值。person一直为null。为什么person会是null呢,ajax请求的时候,已经有入参 var did = { ID: 99999, Name: 'aaa' };为什么呢?求园友帮忙。
public class TestServices : IServices { public Person GetPersonByPerson(Person person)//这里始终是person==null { if (person != null) person.Name = "i am No." + person.ID.ToString(); else person = new Person() { ID=-1,Name="i am No.-1" }; return person; } }
下面是我的WCF的配置。
1 <?xml version="1.0"?> 2 <configuration> 3 <appSettings/> 4 <system.web> 5 <compilation debug="true" targetFramework="4.0"/> 6 <httpRuntime/> 7 </system.web> 8 <system.serviceModel> 9 <standardEndpoints> 10 <webHttpEndpoint> 11 <standardEndpoint crossDomainScriptAccessEnabled="true"/> 12 </webHttpEndpoint> 13 </standardEndpoints> 14 <bindings> 15 <webHttpBinding> 16 <binding crossDomainScriptAccessEnabled="true"/> 17 </webHttpBinding> 18 </bindings> 19 <behaviors> 20 <endpointBehaviors> 21 <behavior name="ajaxbehaviors"> 22 <enableWebScript/> 23 </behavior> 24 </endpointBehaviors> 25 <serviceBehaviors> 26 <behavior> 27 <serviceMetadata httpGetEnabled="true"/> 28 </behavior> 29 </serviceBehaviors> 30 </behaviors> 31 <services> 32 <service name="API.TestServices"> 33 <endpoint address="" binding="webHttpBinding" contract="API.IServices" behaviorConfiguration="ajaxbehaviors"/> 34 </service> 35 </services> 36 </system.serviceModel> 37 <system.webServer> 38 <modules runAllManagedModulesForAllRequests="true"/> 39 <directoryBrowse enabled="true"/> 40 </system.webServer> 41 </configuration>
已经解决是,是json入参的问题。这样写就没问题了。但是如果层次比较深的话,又是个麻烦吧。
var did = { person: '{ "ID": 99999, "Name": "aaa" }' };