Appel de service Web Jquery ASMX – envoi / réception de types complexes

Je ne sais pas si c’est juste l’heure de la journée, le manque de café ou le manque de sucre de la nuit dernière. En plus de cela, j’essaye de faire fonctionner ça. Je ne veux pas changer / modifier / append une nouvelle méthode de service Web.

J’ai un service web asmx:

public UserLogin Login(UserLogin p_objUserLogin) { } 

J’ai besoin de répondre à un appel ajax JQuery. L’object UserLogin n’est pas si complexe que ça:

 public class UserLogin { public UserLogin(); public ssortingng Privileges { get; set; } public ssortingng ClientCodeID { get; set; } public UserDetails User { get; set; } public ssortingng UserLoginMessage { get; set; } public bool Valid { get; set; } } 

L’object UserDetails est assez volumineux et comprend beaucoup plus de données. (J’espère que je n’aurai pas besoin de construire tout l’arborescence d’objects pour que cela fonctionne).

 public class UserDetails { public ssortingng CellPhone { get; set; } public ssortingng Email { get; set; } public ssortingng EncryptedPassword { get; set; } public ssortingng FirstName { get; set; } public ssortingng FullName { get; } public ssortingng Initials { get; set; public bool InService { get; set; } public ssortingng LastName { get; set; } public ssortingng Password { get; set; } public byte[] Signature { get; set; } public ssortingng SimCard { get; set; } public int UserID { get; set; } public ssortingng UserName { get; set; } public SecurityRole UserSecurityRole { get; set; } public Workgroup UserWorkgroup { get; set; } } 

Le script avec lequel je joue:

 function CallService() { var p_objUserLogin = {}; p_objUserLogin['ClientCodeID'] = "Test"; var DTO = { 'p_objUserLogin': p_objUserLogin }; $.ajax({ type: "POST", url: "UtilityServices2006.asmx/Login", data: JSON.ssortingngify(DTO), contentType: "application/json; charset=utf-8", dataType: "json", processData: true, success: function (msg) { alert(msg); }, error: function (req, status, error) { alert(req + ", " + status + ", " + error); }, complete: function (req, status) { alert(req + ", " + status); } }); } 

Toute aide serait assez incroyable.

Assurez-vous que votre classe et méthode Webservice sont conçues pour gérer les demandes ajax / json entrantes:

 [ScriptService] public class MyService: WebService { [WebMethod] [ScriptMethod(ResponseFormat = ResponseFormat.Json)] public UserLogin Login(UserLogin p_objUserLogin) { } } 

Je ne connais pas bien la notation que vous utilisez pour configurer votre object de charge utile (p_objUserLogin [‘ClientCodeID’] = “Test”;). J’ai généralement utilisé une notation légèrement différente:

 p_objUserLogin.ClientCodeID = 'Test'; 

Cependant, cela pourrait être un fouillis rouge – je ne suis pas un expert en objects JS, votre notation est donc parfaitement valide.

Enfin, je ne sais pas si JS convertira automatiquement votre object en JSON (var DTO = {‘p_objUserLogin’: p_objUserLogin};). J’utilise la bibliothèque json2 pour sérialiser explicitement les objects JS en JSON:

 var DTO = { 'p_objUserLogin': JSON.ssortingngify(p_objUserLogin) }; 

J’espère que cela vous aidera à cerner le problème.