2010-04-13 22 views
5

Konuşmam gereken bir web servisim var (kontrolümden). Ayrıca bir paket-sniffer'ım var ve web servisinin geliştiricileri yalan söylemiyor. Verileri doğru alanlarda görüyorum.Gerçek hizmet veri döndüğünde bir WebService null değerini neden döndürür?

Aslında istediğim tüm verileri geri gönderiyorlar. Ancak WSDL dosyasından otomatik olarak oluşturulan web hizmeti kodu bana "boş" değerini bir değer olarak veriyor.

GÜNCELLEME: Açıklama için döndürülen nesne boş DEĞİLDİR. Nesnedeki öğeler boş. Bunun kimseye yardım edip etmeyeceğini bilmiyorum. Ben tamamen güldüm.

Web Referansımı oluşturmak için WSDL dosyalarını kullandım. Veri türlerimi WSDL dosyasının bildirdiği veri tipleriyle kontrol ettim. Ve aşağıdaki çağrıları gerçekleştirmek için aşağıdaki kodu kullandım:

DT_MaterialMaster_LookupRequest req = new DT_MaterialMaster_LookupRequest(); 
req.MaterialNumber = "101*"; 
req.DocumentNo = ""; 
req.Description = "Pipe*"; 
req.Plant = "0000"; 

MI_MaterialMaster_Lookup_OBService srv = new MI_MaterialMaster_Lookup_OBService(); 

DT_MaterialMaster_Response resp = 
    srv.MI_MaterialMaster_Lookup_OB(new DT_MaterialMaster_LookupRequest[] { req }); 


// Note that the response here is ALWAYS null!! 
Console.WriteLine(resp.Status); 

Resp nesnesi gerçek bir nesnedir. Düzgün üretildi. Ancak, Durum ve Malzeme Verisi alanları her zaman boştur.

Ben web hizmetini çağırmak

, ben on line paket-algılayıcı yerleştirdikten ve ben şu (kendi aklı için linebreaks ve indentions) gönderdik görebilirsiniz:

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<soap:Body> 
    <MT_MaterialMaster_Lookup 
     xmlns="http://MyCompany.com/SomeCompany/mm/MaterialMasterSearch"> 
     <Request xmlns=""> 
      <MaterialNumber>101*</MaterialNumber> 
      <Description>Pipe*</Description> 
      <DocumentNo /> 
      <Plant>0000</Plant> 
     </Request> 
    </MT_MaterialMaster_Lookup> 
</soap:Body> 
</soap:Envelope> 
geri göndermek olduğunu

yanıtı geçerli bir yanıt gibi görünüyor (satır aralıkları ve kendi aklı için girintilere):

<SOAP:Envelope xmlns:SOAP='http://schemas.xmlsoap.org/soap/envelope/'> 
<SOAP:Header /> 
    <SOAP:Body> 
     <n0:MT_MaterialMaster_Response 
      xmlns:n0='http://MyCompany.com/SomeCompany/mm/MaterialMasterSearch' 
      xmlns:prx='urn:SomeCompany.com:proxy:BRD:/1SAI/TAS4FE14A2DE960D61219AE:701:2009/02/10'> 
     <Response> 
      <Status>No Rows Found</Status> 
      <MaterialData /> 
     </Response> 
    </n0:MT_MaterialMaster_Response> 
</SOAP:Body> 
</SOAP:Envelope> 

durum aslında veriyi aldığını gösteriyor ... ama resp.Status ve resp.MaterialData alanlar her zaman boştur. Neyi yanlış yaptım?

GÜNCELLEME: WSDL dosyası olarak tanımlanır:

<?xml version="1.0" encoding="utf-8"?> 
<wsdl:definitions xmlns:p1="http://MyCompany.com/SomeCompany/mm/MaterialMasterSearch" name="MI_MaterialMaster_Lookup_OB" targetNamespace="http://MyCompany.com/SomeCompany/mm/MaterialMasterSearch" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> 
    <wsdl:types> 
    <xsd:schema xmlns="http://MyCompany.com/SomeCompany/mm/MaterialMasterSearch" 
     targetNamespace="http://MyCompany.com/SomeCompany/mm/MaterialMasterSearch" 
     xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
     <xsd:element name="MT_MaterialMaster_Response" type="p1:DT_MaterialMaster_Response" /> 
     <xsd:element name="MT_MaterialMaster_Lookup" type="p1:DT_MaterialMaster_Lookup" /> 
     <xsd:complexType name="DT_MaterialMaster_Response"> 
    <xsd:sequence> 
     <xsd:element name="Status" type="xsd:string"> 
     <xsd:annotation> 
      <xsd:appinfo source="http://SomeCompany.com/xi/TextID">d48d03b040af11df99e300145eccb24e</xsd:appinfo> 
     </xsd:annotation> 
     </xsd:element> 
     <xsd:element maxOccurs="unbounded" name="MaterialData"> 
     <xsd:annotation> 
      <xsd:appinfo source="http://SomeCompany.com/xi/TextID">64908aa040a511df843700145eccb24e</xsd:appinfo> 
     </xsd:annotation> 
     <xsd:complexType> 
      <xsd:sequence> 
     <xsd:element name="MaterialNumber" type="xsd:string"> 
      <xsd:annotation> 
      <xsd:appinfo source="http://SomeCompany.com/xi/TextID">64908aa140a511df848500145eccb24e</xsd:appinfo> 
      </xsd:annotation> 
     </xsd:element> 
     <xsd:element minOccurs="0" name="Description" type="xsd:string"> 
      <xsd:annotation> 
      <xsd:appinfo source="http://SomeCompany.com/xi/TextID">64908aa240a511df95bf00145eccb24e</xsd:appinfo> 
      </xsd:annotation> 
     </xsd:element> 
     <xsd:element minOccurs="0" name="DocumentNo" type="xsd:string"> 
      <xsd:annotation> 
      <xsd:appinfo source="http://SomeCompany.com/xi/TextID">64908aa340a511dfb23700145eccb24e</xsd:appinfo> 
      </xsd:annotation> 
     </xsd:element> 
     <xsd:element minOccurs="0" name="UOM" type="xsd:string"> 
      <xsd:annotation> 
      <xsd:appinfo source="http://SomeCompany.com/xi/TextID">3b5f14c040a611df9fbe00145eccb24e</xsd:appinfo> 
      </xsd:annotation> 
     </xsd:element> 
     <xsd:element minOccurs="0" name="Hierarchy" type="xsd:string"> 
      <xsd:annotation> 
      <xsd:appinfo source="http://SomeCompany.com/xi/TextID">64908aa440a511dfc65b00145eccb24e</xsd:appinfo> 
      </xsd:annotation> 
     </xsd:element> 
     <xsd:element minOccurs="0" name="Plant" type="xsd:string"> 
      <xsd:annotation> 
      <xsd:appinfo source="http://SomeCompany.com/xi/TextID">d48d03b140af11dfb78e00145eccb24e</xsd:appinfo> 
      </xsd:annotation> 
     </xsd:element> 
     <xsd:element minOccurs="0" name="Procurement" type="xsd:string"> 
      <xsd:annotation> 
      <xsd:appinfo source="http://SomeCompany.com/xi/TextID">d48d03b240af11dfb87b00145eccb24e</xsd:appinfo> 
      </xsd:annotation> 
     </xsd:element> 
      </xsd:sequence> 
     </xsd:complexType> 
     </xsd:element> 
    </xsd:sequence> 
     </xsd:complexType> 
     <xsd:complexType name="DT_MaterialMaster_Lookup"> 
    <xsd:sequence> 
     <xsd:element maxOccurs="unbounded" name="Request"> 
     <xsd:annotation> 
      <xsd:appinfo source="http://SomeCompany.com/xi/TextID">64908aa040a511df843700145eccb24e</xsd:appinfo> 
     </xsd:annotation> 
     <xsd:complexType> 
      <xsd:sequence> 
     <xsd:element minOccurs="0" name="MaterialNumber" type="xsd:string"> 
      <xsd:annotation> 
      <xsd:appinfo source="http://SomeCompany.com/xi/TextID">64908aa140a511df848500145eccb24e</xsd:appinfo> 
      </xsd:annotation> 
     </xsd:element> 
     <xsd:element minOccurs="0" name="Description" type="xsd:string"> 
      <xsd:annotation> 
      <xsd:appinfo source="http://SomeCompany.com/xi/TextID">64908aa240a511df95bf00145eccb24e</xsd:appinfo> 
      </xsd:annotation> 
     </xsd:element> 
     <xsd:element minOccurs="0" name="DocumentNo" type="xsd:string"> 
      <xsd:annotation> 
      <xsd:appinfo source="http://SomeCompany.com/xi/TextID">64908aa340a511dfb23700145eccb24e</xsd:appinfo> 
      </xsd:annotation> 
     </xsd:element> 
     <xsd:element minOccurs="0" name="Plant" type="xsd:string"> 
      <xsd:annotation> 
      <xsd:appinfo source="http://SomeCompany.com/xi/TextID">64908aa440a511dfc65b00145eccb24e</xsd:appinfo> 
      </xsd:annotation> 
     </xsd:element> 
      </xsd:sequence> 
     </xsd:complexType> 
     </xsd:element> 
    </xsd:sequence> 
     </xsd:complexType> 
    </xsd:schema> 
    </wsdl:types> 
    <wsdl:message name="MT_MaterialMaster_Lookup"> 
    <wsdl:part name="MT_MaterialMaster_Lookup" element="p1:MT_MaterialMaster_Lookup" /> 
    </wsdl:message> 
    <wsdl:message name="MT_MaterialMaster_Response"> 
    <wsdl:part name="MT_MaterialMaster_Response" element="p1:MT_MaterialMaster_Response" /> 
    </wsdl:message> 
    <wsdl:portType name="MI_MaterialMaster_Lookup_OB"> 
    <wsdl:operation name="MI_MaterialMaster_Lookup_OB"> 
     <wsdl:input message="p1:MT_MaterialMaster_Lookup" /> 
     <wsdl:output message="p1:MT_MaterialMaster_Response" /> 
    </wsdl:operation> 
    </wsdl:portType> 
    <wsdl:binding name="MI_MaterialMaster_Lookup_OBBinding" type="p1:MI_MaterialMaster_Lookup_OB"> 
    <binding transport="http://schemas.xmlsoap.org/soap/http" xmlns="http://schemas.xmlsoap.org/wsdl/soap/" /> 
    <wsdl:operation name="MI_MaterialMaster_Lookup_OB"> 
     <operation soapAction="http://SomeCompany.com/xi/WebService/soap1.1" xmlns="http://schemas.xmlsoap.org/wsdl/soap/" /> 
     <wsdl:input> 
    <body use="literal" xmlns="http://schemas.xmlsoap.org/wsdl/soap/" /> 
     </wsdl:input> 
     <wsdl:output> 
    <body use="literal" xmlns="http://schemas.xmlsoap.org/wsdl/soap/" /> 
     </wsdl:output> 
    </wsdl:operation> 
    </wsdl:binding> 
    <wsdl:service name="MI_MaterialMaster_Lookup_OBService"> 
    <wsdl:port name="MI_MaterialMaster_Lookup_OBPort" binding="p1:MI_MaterialMaster_Lookup_OBBinding"> 
     <address location="http://bxdwas.MyCompany.com/XISOAPAdapter/MessageServlet?channel=:SOAP_SND_Material_Lookup" xmlns="http://schemas.xmlsoap.org/wsdl/soap/" /> 
    </wsdl:port> 
    </wsdl:service> 
</wsdl:definitions> 

cevap

6

Neredeyse her zaman anlamına gelir orada "Web Servis boş döndürür" Beni emin olmak için WSDL göndermek zorunda, ama istediğiniz bir itiraz olduğundan XML Ad Alanları hakkında - hizmet size bir ad alanında veri gönderiyor ve .NET farklı bir ad alanı bekliyor.

Bu durumda, sarıcı öğesi http://MyCompany.com/SomeCompany/mm/MaterialMasterSearch ad alanında olsa bile, yanıtın çoğunun varsayılan ad alanında olduğunu unutmayın.

+0

Harika bir fikir ... Cevabını çarptım, çünkü iyi bir vuruştu. Ancak, bir paket taklit edebiliyorum ve paketlerini taklit ettim ve ad alanlarını her yerde değiştirdim. Bu problem gibi görünmüyor. Bu çöküyor ve nesnenin kendisi NULL DEĞİLDİR. Nesnedeki öğeler boş. – Jerry

+0

@Jerry: Bunu öğle yemeğinde daha ayrıntılı olarak görmeye çalışacağım - ancak WSDL'nin genellikle karışık ad alanlarını gösteren işaretleri göstermediğini söylemeliyim. Bu arada, Reference.cs dosyanıza bakabilir ve elemanlara hangi ad alanlarının konulduğunu görebilir ve XML ile karşılaştırırsanız bu iyi olur. –

+1

Geliştiricilerle konuştular ve bana yeni bir WSDL yolladılar. (Yemin ederim ki hükümet sırlarını göndermelerini istedim). Nihayet var, ve bilmezsin, farklı. Görünüşe göre, her öğe artık bir dizi öğe, tek bir öğe değil, bu yüzden null ... niçin oldu. – Jerry

2

Servis referanslarınızın güncel olduğundan emin olun. Bu, WSDL hizmeti değiştiğinde, ancak başvurular güncelleştirilmediğinde gerçekleşir.

İlgili konular