2013-12-16 4 views
0

[РЕШИТЬ]Получить пользовательский объект WCF с Json

Я сделал небольшой тестовый проект, чтобы опереться, как работать с объектами WCF и Json. Если у вас есть хорошие ресурсы/учебники, сделайте это, пожалуйста, дайте мне знать.

Я пытаюсь получить нестандартный объект User его id с некоторым сценарием jQuery, при этом моя служба завершается с ошибкой без сообщения. Возвращение "известный" объекты, такие как int или string работ в порядке, так что я думаю, что мой web.config должна быть тонкой

IService

[ServiceContract] 
public interface IService 
{ 
    [OperationContract] 
    [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)] 
    User GetUser(int id);  
} 

[DataContract] 
public class User 
{ 
    [DataMember] 
    public int id { get; set; } 
    [DataMember] 
    public string name { get; set; } 
} 

Service.svc.cs

[AspNetCompatibilityRequirements(RequirementsMode 
= AspNetCompatibilityRequirementsMode.Allowed)] 
public class Service1 : IService 
{ 
    public User GetUser(int id) 
    { 
     return new User() { id=1, name="foo" }; 
    } 
} 

Json

var Type; 
var Url; 
var Data; 
var ContentType; 
var DataType; 
var ProcessData;  

$(document).ready(
     function() { 
      $("#log").append("<p>Document ready</p>"); 
      GetUser(); 
     } 
    ); 

function GetUser() { 
     $("#log").append("<p>Called GetUser</p>"); 
     var userid = "1"; 
     Type = "POST"; 
     Url = "http://localhost:4270/Service.svc/GetUser"; 
     Data = '{"Id": "' + userid + '"}'; 
     ContentType = "application/json; charset=utf-8"; 
     DataType = "json"; 
     varProcessData = true; 
     CallService(); 
    } 

function CallService() { 
     $("#log").append("<p>Called CallService</p>"); 
     $.ajax({ 
      type: Type, 
      url: Url, 
      data: Data, 
      contentType: ContentType, 
      dataType: DataType, 
      processdata: ProcessData, 
      success: function(msg) { 
       ServiceSucceeded(msg); 
      }, 
      error: ServiceFailed 
     }); 
    } 

function ServiceSucceeded(result) { 
     $("#log").append("<p>ServiceSucceeded</p>"); 
     if (DataType == "json") { 
      user = result.GetUserResult; 
      $("#result").append("<p> user = " +user+ "</p>"); 
      $("#result").append("<p> id = " +user.id+ "</p>"); 
      $("#result").append("<p> name = " +user.name+ "</p>"); 
     } 
    } 
+5

Разве не ясно? вы вызываете * GetUser * рекурсивно, не останавливаясь. 'return GetUser (Convert.ToInt32 (id));' –

+0

Да .. после проверки доказательств я сразу увидел это. У меня была другая ошибка, и я отредактировал свой вопрос. – David

+2

Я заметил еще одну проблему с вашим jQuery. Вы не передаете значения ajax в CallService, поэтому ваш вызов ajax не будет работать. TYPE, URL, DATA, CONTENTTYPE и т. Д. - все неопределенные переменные в области этой функции. вам необходимо передать их с помощью метода getUser() – heymega

ответ

1

Вы пытались изменить регистр данных вашего сообщения?

так это:

Data = '{"Id": "' + userid + '"}'; 

Должно быть так:

Data = '{"id": "' + userid + '"}'; 
Смежные вопросы