Объект ответа C # содержит ноль при вызове веб-службы Java - PullRequest
2 голосов
/ 22 декабря 2009

Мне прислали следующий wsdl. Я сгенерировал прокси C # с помощью wsdl.exe, а также создал свою веб-страницу c #. Используя Fiddler, я посмотрел на SOAP-ответ, и он содержит данные. Любое руководство о том, какие изменения необходимы для того, чтобы программа C # приняла ответ SOAP. Прошу прощения за форматирование wsdl. Я не знал, какой формат использовать для достижения наилучших результатов.

WSDL

<?xml version="1.0" encoding="UTF-8" ?>
   <wsdl:definitions xmlns:tns="https://wwf.web.spiritaero.com/tot/moves" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="CreateMoveHistory" targetNamespace="https://wwf.web.spiritaero.com/tot/moves" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
   <wsdl:types>
     <xsd:schema targetNamespace="https://wwf.web.spiritaero.com/tot/moves" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <xsd:element name="CreateMoveHistoryResponse" type="tns:ReturnMessage" />
      <xsd:element name="CreateMoveHistoryRequest" type="tns:CreateMoveHistoryContract" />
       <xsd:complexType name="CreateMoveHistoryContract">
         <xsd:sequence minOccurs="1" maxOccurs="1">
          <xsd:element name="FromApplication" type="xsd:string" />
          <xsd:element name="ActionName" type="xsd:string" />
          <xsd:element name="OrderNumber" nillable="false" type="xsd:string" minOccurs="1" maxOccurs="1" />
          <xsd:element name="WorkCenter" nillable="false" type="xsd:string" minOccurs="1" maxOccurs="1" />
          <xsd:element name="Zone" nillable="false" type="xsd:string" minOccurs="1" maxOccurs="1" />
          <xsd:element name="Building" nillable="false" type="xsd:string" minOccurs="1" maxOccurs="1" />
          <xsd:element name="Floor" nillable="false" type="xsd:string" minOccurs="1" maxOccurs="1" />
          <xsd:element name="Post" nillable="false" type="xsd:string" minOccurs="1" maxOccurs="1" />
          <xsd:element name="SubCode" nillable="false" type="xsd:string" minOccurs="1" maxOccurs="1" />
          <xsd:element name="SubId" nillable="false" type="xsd:string" minOccurs="1" maxOccurs="1" />
          <xsd:element name="ScanDate" nillable="false" type="xsd:string" minOccurs="1" maxOccurs="1" />
          <xsd:element name="AntennaId" nillable="false" type="xsd:string" minOccurs="1" maxOccurs="1" />
          <xsd:element name="AntennaDescription" nillable="false" type="xsd:string" minOccurs="1" maxOccurs="1" />
          <xsd:element name="PartNumber" nillable="false" type="xsd:string" minOccurs="1" maxOccurs="1" />
        </xsd:sequence>
      </xsd:complexType>
       <xsd:complexType name="CreateMoveHistoryFacade">
         <xsd:sequence minOccurs="1" maxOccurs="1">
          <xsd:element name="FromApplication" type="xsd:string" />
          <xsd:element name="ActionName" type="xsd:string" />
          <xsd:element name="OrderNumber" nillable="false" type="xsd:string" minOccurs="1" maxOccurs="1" />
          <xsd:element name="WorkCenter" nillable="false" type="xsd:string" minOccurs="1" maxOccurs="1" />
          <xsd:element name="Zone" nillable="false" type="xsd:string" minOccurs="1" maxOccurs="1" />
          <xsd:element name="Building" nillable="false" type="xsd:string" minOccurs="1" maxOccurs="1" />
          <xsd:element name="Floor" nillable="false" type="xsd:string" minOccurs="1" maxOccurs="1" />
          <xsd:element name="Post" nillable="false" type="xsd:string" minOccurs="1" maxOccurs="1" />
          <xsd:element name="SubCode" nillable="false" type="xsd:string" minOccurs="1" maxOccurs="1" />
          <xsd:element name="SubId" nillable="false" type="xsd:string" minOccurs="1" maxOccurs="1" />
          <xsd:element name="ScanDate" nillable="false" type="xsd:string" minOccurs="1" maxOccurs="1" />
          <xsd:element name="AntennaId" nillable="false" type="xsd:string" minOccurs="1" maxOccurs="1" />
          <xsd:element name="AntennaDescription" nillable="false" type="xsd:string" minOccurs="1" maxOccurs="1" />
          <xsd:element name="PartNumber" nillable="false" type="xsd:string" minOccurs="1" maxOccurs="1" />
          <xsd:element name="ReturnCode" nillable="false" type="xsd:string" minOccurs="1" maxOccurs="1" />
          <xsd:element name="ReturnMessage" nillable="false" type="xsd:string" minOccurs="1" maxOccurs="1" />
        </xsd:sequence>
      </xsd:complexType>
       <xsd:complexType name="ReturnMessage">
         <xsd:sequence minOccurs="1" maxOccurs="1">
          <xsd:element name="Message" nillable="false" type="xsd:string" minOccurs="1" maxOccurs="1" />
        </xsd:sequence>
      </xsd:complexType>
    </xsd:schema>
  </wsdl:types>
   <wsdl:message name="createMoveHistoryResponse">
    <wsdl:part element="tns:CreateMoveHistoryResponse" name="createMoveHistoryResponse" />
  </wsdl:message>
   <wsdl:message name="createMoveHistoryRequest">
    <wsdl:part element="tns:CreateMoveHistoryRequest" name="createMoveHistoryRequest" />
  </wsdl:message>
   <wsdl:portType name="CreateMoveHistoryPort">
     <wsdl:operation name="createMoveHistory">
      <wsdl:input message="tns:createMoveHistoryRequest" />
      <wsdl:output message="tns:createMoveHistoryResponse" />
    </wsdl:operation>
  </wsdl:portType>
   <wsdl:binding name="CreateMoveHistorySoap" type="tns:CreateMoveHistoryPort">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
     <wsdl:operation name="createMoveHistory">
      <soap:operation soapAction="https://wwf.web.spiritaero.com/tot/moves/CreateMoveHistory" />
       <wsdl:input>
        <soap:body use="literal" />
      </wsdl:input>
       <wsdl:output>
        <soap:body use="literal" />
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
   <wsdl:service name="CreateMoveHistory">
     <wsdl:port binding="tns:CreateMoveHistorySoap" name="CreateMoveHistory">
      <soap:address location="http://pc790503.corp.spiritaero.com:8080/tot/moves?action=CreateMoveHistory" />
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>

Скрипач

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">  
<soapenv:Header/>   
 <soapenv:Body> 
  <ReturnMessage xmlns="https://wwf.web.spiritaero.com/tot/moves">           
   <Message>Successful</Message>      
  </ReturnMessage>   
 </soapenv:Body> 
</soapenv:Envelope>

Код C #, сгенерированный для ответа

    [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
    [System.SerializableAttribute()]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="https://wwf.web.spiritaero.com/tot/moves")]
    public partial class CreateMoveHistoryResponse {

    private string messageField;

    /// <remarks/>
    public string Message {
        get {
            return this.messageField;
        }
        set {
            this.messageField = value;
        }
    }
}

Код C # для вызова веб-службы

CreateMoveHistory proxy;
        CreateMoveHistoryRequest cmhRequest;
        CreateMoveHistoryResponse msg;
....

            msg = new CreateMoveHistoryResponse();
            proxy = new CreateMoveHistory();
            cmhRequest = new CreateMoveHistoryRequest();
            cmhRequest.OrderNumber = "12345";
            cmhRequest.Zone = "2";
            cmhRequest.Building = "297F";
            cmhRequest.Floor = "1";
            cmhRequest.Post = "XX";
            msg = proxy.createMoveHistory(cmhRequest);

С уважением,

D. Фуллер

Ответы [ 3 ]

1 голос
/ 01 апреля 2010

Если вы используете WebReferences, позвольте проверить файл wsdl, чтобы убедиться, что targetNamespace и name name совпадают.

Надеюсь, это поможет!

0 голосов
/ 04 августа 2010

Я не вижу определения CreateMoveHistoryResponse в вашем мыльном ответе ... Вместо этого я вижу ReturnMessage ... и считаю, что проблема есть.

Я вижу <xsd:element name="CreateMoveHistoryResponse" type="tns:ReturnMessage" /> в вашем определении wsdl, но я не знаю, почему утилита wsdl.exe не генерирует класс правильного типа.

Надеюсь, это поможет решить проблему ...

0 голосов
/ 22 декабря 2009

Ну, во-первых, я бы отслеживал ваш сетевой трафик (HTTP), чтобы убедиться, что что-то возвращается. Если это так, я помню проблемы с пространствами имен при вызове Web-сервиса из C # в Java и наоборот. У одной из сторон была декларация пространства имен, у другой - нет, и одна из сторон подумала бы, что у нее нет данных, потому что она ищет что-то другое.

Это очень общее объяснение, но это было давно. Я помню, что это было положительно причиной проблем. Возможно, вам придется использовать другой клиент WS для мониторинга допустимого вызова, а затем проверить, что отличается, когда вы выполняете вызов из клиента C #.

...