2012-04-17 9 views
5

मैं अपने इंट्रानेट पर होस्ट की गई वेब सेवा के लिए एक साधारण डब्ल्यूसीएफ क्लाइंट (सी #) बनाने की कोशिश कर रहा हूं। फिडलर और सोपयूआई का उपयोग करके मैं अनुरोध देख सकता हूं और प्रतिक्रिया ठीक लगती है, लेकिन जब मैं कोड चलाता हूं तो खाली सरणी लौटा दी जाती है।डब्ल्यूसीएफ क्लाइंट खाली सरणी देता है - एक्सएमएल प्रतिक्रिया ठीक लगता है

मैं केवल प्रासंगिक लाइनों चिपकाने के लिए (सामान का एक बहुत हो जाएगा और अभी तक) की कोशिश करेंगे, लेकिन पूछने के लिए स्वतंत्र महसूस हो रहा है, अगर मैंने कुछ याद किया:

डबल्यूएसडीएल:

<s0:definitions name="Workforce_2_1_0" targetNamespace="ld:Logical/Workforce_2_1_0_ws" xmlns:s0="http://schemas.xmlsoap.org/wsdl/" xmlns:s1="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:s2="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:s3="ld:Logical/Workforce_2_1_0_ws" xmlns:s4="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"> 
    <s0:documentation>Oracle Data Service Integrator Web Service</s0:documentation> 
    <s1:Policy s2:Id="Mtom.xml"> 
     <wsoma:OptimizedMimeSerialization xmlns:wsoma="http://schemas.xmlsoap.org/ws/2004/09/policy/optimizedmimeserialization"/> 
    </s1:Policy> 
    <wsp:UsingPolicy s0:Required="true"/> 
    <s0:types> 
     <xs:schema elementFormDefault="qualified" targetNamespace="ld:Logical/Workforce_2_1_0_ws" xmlns:dsns0="http://schemata.enterprise.biz/hr/2.1" xmlns:s1="ld:Logical/Workforce_2_1_0_ws" xmlns:s2="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:stns="ld:Logical/Workforce_2_1_0_ws" xmlns:tns="ld:Logical/Workforce_2_1_0_ws" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
     <xs:import namespace="http://schemata.enterprise.biz/hr/2.1" schemaLocation="http://server123.enterprise.com:31900/MyService/Services/Workforce_2-1-0?SCHEMA%2FMyService%2FResources%2FSchemas%2FWorkForce_2.1"/> 
     <xs:element name="getByKey"> 
      <xs:complexType> 
       <xs:sequence> 
        <xs:element name="key" type="xs:string"/> 
       </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:schema> 
    </s0:types> 
    <s0:message name="getByKeyIn"> 
     <s0:part element="s3:getByKey" name="parameters"/> 
    </s0:message> 
    <s0:message name="getByKeyOut"> 
     <s0:part element="s3:getByKeyResponse" name="parameters"/> 
    </s0:message> 
    <s0:portType name="Workforce_2_1_0PT"> 
     <s0:operation name="getByKey"> 
     <s0:input message="s3:getByKeyIn"/> 
     <s0:output message="s3:getByKeyOut"/> 
     </s0:operation> 
    </s0:portType> 
    <s0:binding name="Workforce_2_1_0SoapBinding" type="s3:Workforce_2_1_0PT"> 
     <s4:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> 
     <wsp:Policy> 
     <wsp:PolicyReference URI="#Mtom.xml"/> 
     </wsp:Policy> 
     <s0:operation name="getByKey"> 
     <s4:operation soapAction="ld:Logical/Workforce_2_1_0_ws/getByKey" style="document"/> 
     <s0:input> 
      <s4:body use="literal"/> 
     </s0:input> 
     <s0:output> 
      <s4:body use="literal"/> 
     </s0:output> 
     </s0:operation> 
    </s0:binding> 
    <s0:service name="Workforce_2_1_0SoapService"> 
     <s0:port binding="s3:Workforce_2_1_0SoapBinding" name="Workforce_2_1_0SoapPort"> 
     <s4:address location="http://server123.enterprise.com:31900/MyService/Services/Workforce_2-1-0"/> 
     </s0:port> 
    </s0:service> 
</s0:definitions> 

बाध्यकारी विन्यास:

<basicHttpBinding> 
    <binding name="Workforce_2_1_0SoapBinding" closeTimeout="00:01:00" 
     openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" 
     allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" 
     maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 
     messageEncoding="Mtom" textEncoding="utf-8" transferMode="Buffered" 
     useDefaultWebProxy="true"> 
    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
     maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
    <security mode="TransportCredentialOnly"> 
     <transport clientCredentialType="Basic" proxyCredentialType="None" 
      realm="" /> 
     <message clientCredentialType="UserName" algorithmSuite="Default" /> 
    </security> 
    </binding> 
</basicHttpBinding> 

Endpoint:

<endpoint address="http://server123.enterprise.com:31900/MyService/Services/Workforce_2-1-0" 
    binding="basicHttpBinding" bindingConfiguration="Workforce_2_1_0SoapBinding" 
    contract="Workforce.Workforce_2_1_0PT" name="Workforce_2_1_0SoapPort" /> 

अनुरोध (फ़िडलर के माध्यम से):

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
    <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
     <getByKey xmlns="ld:Logical/Workforce_2_1_0_ws"> 
      <key>ABCDEFGH</key> 
     </getByKey> 
    </s:Body> 
</s:Envelope> 

रिस्पांस (फ़िडलर के माध्यम से):

<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'> 
    <soapenv:Header></soapenv:Header> 
    <soapenv:Body> 
     <ns:getByKeyResponse xmlns:ns='ld:Logical/Workforce_2_1_0_ws'> 
      <ns0:basicWorkforce xmlns:ns0="http://schemata.enterprise.biz/hr/2.1"> 
       <ns0:key>ABCDEFGH</ns0:key> 
       <ns0:name>JUAN PABLO MONTOYA</ns0:name> 
      </ns0:basicWorkforce> 
     </ns:getByKeyResponse> 
    </soapenv:Body> 
</soapenv:Envelope> 

क्लाइंट कोड:

Workforce_2_1_0PTClient client = new Workforce_2_1_0PTClient(); 

client.ClientCredentials.UserName.UserName = "MyUsername"; 
client.ClientCredentials.UserName.Password = "MyPassword"; 

var result = client.getByKey("ABCDEFGH"); 

संपादित करें: प्रॉक्सी कोड भी शामिल है, विजुअल स्टूडियो द्वारा उत्पन्न

[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] 
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] 
[System.ServiceModel.MessageContractAttribute(WrapperName="getByKey", WrapperNamespace="ld:Logical/Workforce_2_1_0_ws", IsWrapped=true)] 
public partial class getByKeyRequest { 

    [System.ServiceModel.MessageBodyMemberAttribute(Namespace="ld:Logical/Workforce_2_1_0_ws", Order=0)] 
    public string key; 

    public getByKeyRequest() { 
    } 

    public getByKeyRequest(string key) { 
     this.key = key; 
    } 
} 

[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] 
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] 
[System.ServiceModel.MessageContractAttribute(WrapperName="getByKeyResponse", WrapperNamespace="ld:Logical/Workforce_2_1_0_ws", IsWrapped=true)] 
public partial class getByKeyResponse { 
[System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://schemata.enterprise.biz/hr/2.1", Order=0)] 
    [System.Xml.Serialization.XmlElementAttribute("basicWorkforce")] 
    public basicWorkforce[] basicWorkforce; 

    public getByKeyResponse() { 
    } 

    public getByKeyResponse(basicWorkforce[] basicWorkforce) { 
     this.basicWorkforce = basicWorkforce; 
    } 
} 

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.225")] 
[System.SerializableAttribute()] 
[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.ComponentModel.DesignerCategoryAttribute("code")] 
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemata.enterprise.biz/hr/2.1")] 
public partial class basicWorkforce : object, System.ComponentModel.INotifyPropertyChanged { 

    private string keyField; 

    private string nameField; 

    [System.Xml.Serialization.XmlElementAttribute(Order=0)] 
    public string key { 
     get { 
      return this.keyField; 
     } 
     set { 
      this.keyField = value; 
      this.RaisePropertyChanged("key"); 
     } 
    } 

    [System.Xml.Serialization.XmlElementAttribute(Order=1)] 
    public string name { 
     get { 
      return this.nameField; 
     } 
     set { 
      this.nameField = value; 
      this.RaisePropertyChanged("name"); 
     } 
    } 
} 

यहां तक ​​कि अगर प्रतिक्रिया एक basicWorkforce तत्व होता है, result चर basicWorkforce के एक खाली सरणी है।

लंबी पोस्ट के बारे में क्षमा करें और सहायता के लिए अग्रिम धन्यवाद। > उन्नत
या
सेवा संदर्भ के तहत - -> कॉन्फ़िगर सेवा संदर्भ

उत्तर

4

अंत में यह हुआ! किसी भी समस्या का सामना करने वाले किसी के लिए, यह नामस्थानों पर स्थित है। इस मामले में, सरणी पर getByKeyResponse द्वारा लौटाया गया।

[System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://schemata.enterprise.biz/hr/2.1", Order=0)] 
    [System.Xml.Serialization.XmlElementAttribute("basicWorkforce")] 
    public basicWorkforce[] basicWorkforce; 
इस के साथ

:

तो, मैं सिर्फ इस प्रतिस्थापित

[System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://schemata.enterprise.biz/hr/2.1", Order=0)] 
    [System.Xml.Serialization.XmlElementAttribute("basicWorkforce", Namespace = "http://schemata.enterprise.biz/hr/2.1")] 
    public basicWorkforce[] basicWorkforce; 
+1

मुझे एक ही समस्या का सामना करना पड़ रहा है, मुझे इस समाधान की कोशिश की गई लेकिन इसे सही नहीं किया गया। क्या आप मेरी मदद कर सकते हैं? http://stackoverflow.com/questions/34450237/wsdl-web-service-returns-empty-array-from-c-sharp –

+0

वहां एक उत्तर पोस्ट किया गया। वह एक मुश्किल था! –

0

आप संग्रह प्रकार जोड़ें सेवा संदर्भ में
इसके System.Array करने के लिए बनाया है।

+0

हाँ, यह System.Array पर सेट है, लेकिन मैं यह भी नहीं भाग्य के साथ System.Generic.List की कोशिश की। –

संबंधित मुद्दे