[РЕШИТЬ]Получить пользовательский объект 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>");
}
}
Разве не ясно? вы вызываете * GetUser * рекурсивно, не останавливаясь. 'return GetUser (Convert.ToInt32 (id));' –
Да .. после проверки доказательств я сразу увидел это. У меня была другая ошибка, и я отредактировал свой вопрос. – David
Я заметил еще одну проблему с вашим jQuery. Вы не передаете значения ajax в CallService, поэтому ваш вызов ajax не будет работать. TYPE, URL, DATA, CONTENTTYPE и т. Д. - все неопределенные переменные в области этой функции. вам необходимо передать их с помощью метода getUser() – heymega