Tôi đang cố tạo một WCF Client đơn giản (C#) cho một dịch vụ web được lưu trữ trên mạng nội bộ của chúng tôi. Sử dụng Fiddler và SoapUI Tôi có thể thấy yêu cầu và phản hồi có vẻ OK, nhưng khi tôi chạy mã một mảng trống được trả về.WCF khách hàng trả về mảng trống - phản hồi XML có vẻ OK
Tôi sẽ cố gắng để dán chỉ các dòng có liên quan (nhưng sẽ có rất nhiều thứ), nhưng đừng ngần ngại hỏi nếu tôi bỏ lỡ một cái gì đó:
WSDL:
<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>
cấu hình Binding:
<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" />
Yêu cầu (thông qua Fiddler):
<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>
đáp ứng (thông qua Fiddler):
<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>
Khách hàng đang:
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");
EDIT: Bao gồm mã proxy, được tạo ra bởi Visual Studio
[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");
}
}
}
Thậm chí nếu phản ứng có chứa một basicWorkforce
yếu tố, biến result
là một mảng trống của basicWorkforce
.
Xin lỗi về bài đăng dài và cảm ơn trước sự giúp đỡ.
Tôi đang đối mặt với cùng một vấn đề, tôi đã thử giải pháp này nhưng nó không được sửa chữa. Bạn có thể giúp tôi được không? http://stackoverflow.com/questions/34450237/wsdl-web-service-returns-empty-array-from-c-sharp –
Đăng câu trả lời ở đó. Đó là một điều khó khăn! –