2016-12-12 2 views
0

Je rencontre des problèmes avec une référence de service à une source externe (ajoutée à l'aide du fichier wsdl fourni dans Visual Studio 2015).Référence de service générée par WSDL renvoyant la valeur null

La situation est que la requête que j'exécute semble bien atteindre le serveur. Je semble également obtenir une réponse du format xml attendu (ajouté TextWriterTraceListener). Mais la classe OutType que je récupère dans le code (dans ce cas le GetBankCertificateOutType) est toujours nulle.

L'application de console ive construite pour illustrer est très simple, en utilisant le compte de test public. Il se présente comme suit:

static void Main(string[] args) 
     { 
      //instantiates client from the service reference 
      var client = new PkiServicePortTypeClient(); 

      var time = DateTime.UtcNow; 
      Random r = new Random(); 
      string reqId = r.Next(100, 999).ToString(); 

      var outType = client.GetBankCertificate(*full params on github*); 

      //This line will throw nullexception since outType is always null 
      //BUT a valid response is actually received (although returning aa application statusCode that represents error at this stage) 
      var response = outType.GetBankCertificateResponse; 
     } 

J'ai essayé de localiser le problème mais je n'ai pas réussi à le résoudre. Je voulais donc voir si quelqu'un a un bon conseil sur la façon de déboguer cela ou peut-être une solution.

J'ai construit un projet d'exemple console complet et minimal (y compris le wsdl source) pour illustrer le problème qui se trouve here.

Répondre

2

J'ai téléchargé et testé votre solution, et je trouve cela dans trace.log

GetBankCertificateRequest at tribute {http://www.w3.org/XML/1998/namespace}id had invalid value '360817' of type '{http://www .w3.org/2001/XML Schema}ID' 

Après avoir joué avec la valeur de idGetBankCertificateRequest je suis revenu à la juste valeur (au lieu de null).

var outType = client.GetBankCertificate(new GetBankCertificateInType { 
      RequestHeader = new RequestHeaderType { 
       SenderId = "360817", 
       CustomerId = "360817", 
       RequestId = reqId, 
       Environment = EnvironmentType.test, 
       EnvironmentSpecified = true, 
       InterfaceVersion = "1", 
       Timestamp = time 
      }, 
      GetBankCertificateRequest = new GetBankCertificateRequest { 
       BankRootCertificateSerialNo = "1111110002", 
       //id = "", 
       RequestId = reqId, 
       Timestamp = time 
      } 
     }); 

Il n'y a pas de description pour cette propriété en fonction de la documentation (PKI service description v2.3.pdf), sauf une annotation de type xml (xml:id). La description du schéma concret est manquante.

+0

Votre tout à fait raison, et cela a bien fonctionné. J'ai vu ce message, mais interprété est le résultat du rejet du serveur, et non quelque chose qui causerait des problèmes de désérialisation. Merci beaucoup pour cela, regardé moi en face pendant que j'essayais de déboguer la référence de service :). – Baserz