2016-12-12 8 views
0

У меня есть некоторые проблемы с ссылкой службы на внешний источник (добавлено с помощью поставляемого wsdl в Visual Studio 2015).Ссылка на службу WSDL, возвращающую нуль

Ситуация заключается в том, что запрос, который я запускаю, кажется, доходит до сервера. Я также получаю ответ ожидаемого формата xml (добавлен TextWriterTraceListener). Но класс OutType я вернусь в код (в данном случае GetBankCertificateOutType) всегда null.

Консольное приложение ive, построенное для иллюстрации, очень простое, используя публичную тестовую учетную запись. Он выглядит следующим образом:

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; 
     } 

Ive попытался найти проблему, но был неудачным софаром. Поэтому хотелось бы узнать, есть ли у кого-то хороший совет о том, как отлаживать это или, возможно, иметь решение.

Я построил полный, минимальный проект консоли (включая исходный wsdl), чтобы проиллюстрировать проблему, которая находится here.

ответ

2

Я скачал и осмотрел свое решение, и я нашел это в 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' 

После того как я играл с id значения GetBankCertificateRequest я вернулся правильное значение (вместо нулевого).

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 
      } 
     }); 

Там нет описания для этого объекта в соответствии с документацией (PKI service description v2.3.pdf), за исключением некоторого типа XML аннотации (xml:id). Конкретное описание схемы отсутствует.

+0

Ваш абсолютно правый, и он отлично работал. Я видел это сообщение, но его интерпретировали в результате отказа сервера от него, а не от того, что могло бы вызвать проблемы десериализации. Большое спасибо за это, посмотрел мне прямо в лицо, пока я пытался отладить ссылку на службу :). – Baserz