Проблема десериализации мыльного сообщения при перезвоне - PullRequest
2 голосов
/ 18 ноября 2010

Я внедряю службу WCF .NET, которая вызывается другой службой.
Мыльное сообщение, которое служба обратного вызова отправляет обратно, ниже

SOAP-сообщение

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"                
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <soapenv:Body>
<ns1:getAccountBalance soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="http://service.company.x.y">
  <param0 xsi:type="xsd:string">123-K</param0>
  <param1 xsi:type="xsd:string">551003</param1>
  <param2 xsi:type="xsd:string">123</param2>
  <param3 xsi:type="xsd:string">1231</param3>
  <param4 xsi:type="xsd:string">ug</param4>
  <param5 xsi:type="xsd:string">x</param5>
  <param6 xsi:type="xsd:string">1.0</param6>
</ns1:getAccountBalance>
  </soapenv:Body>
</soapenv:Envelope>

Контракт WCF на получение сообщений

 [OperationContract(Action="")]
    AccountEnquiryResponse getAccountBalance(String param0, String param1, String param2, String param3, String param4, String param5, String param6);

Служба реализации

[ServiceBehavior(Namespace = "http://service.company.x.y")]
public class MyService:IService
{
    public AccountEnquiryResponse getAccountBalance(String param0, String param1, String param2, String param3, String param4, String param5, String param6)
    {
        return new AccountEnquiryResponse

Проблема

Когда обратный вызов возвращает, служба WCF не может десериализовать параметры сообщения SOAP - все они null

Мыльное сообщение, которое работает

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<getAccountBalance xmlns="http://service.company.x.y">
  <param0>123</param0>
  <param1>123</param1>
  <param2>uid</param2>
  <param3>pwd</param3>
  <param4>en</param4>
  <param5>ug</param5>
  <param6>1.0</param6>
</getAccountBalance>
</s:Body>
</s:Envelope>

Мой вывод

Разница между сообщением SOAP, которое работает, и тем, которое не работает, заключается в свойствах soapenv: encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/" и xsi: type =" xsd: string в параметрах и .NET не может десериализовать объект должным образом из-за них.

Это правда?

Что я могу сделать, чтобы решить эту проблему?

PS. служба, которая перезванивает мне, является сторонним приложением, написанным на JAVA, и я не могу контролировать формат сообщения, отправляемого обратно в мое приложение.

Пожалуйста, сообщите

1 Ответ

0 голосов
/ 02 февраля 2011

Имеет ли .Net атрибут для задания пространства имен для объекта AccountEnquiryResponse? Это решит обе ваши проблемы.

Если вы сервер, что клиент использовал для создания своих заглушек? Вы дали им WSDL? или указать их на ваш работающий сервер? Если вы дали им wsdl, использовали ли вы тот же самый wsdl для генерации вашего интерфейса службы?

Это выглядит реально как две стороны, не использующие один и тот же интерфейс. XML действительно довольно требователен к полностью определенным именам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...