Я использую веб-службу SOAP и вызываю метод, чей ответ определяется в WSDL следующим образом -
<wsdl:operation name="changeRecording">
<wsdl:input message="tns:changeRecording" name="changeRecording">
</wsdl:input>
<wsdl:output message="tns:changeRecordingResponse" name="changeRecordingResponse">
</wsdl:output>
<wsdl:fault message="tns:CaptureWebServiceException" name="CaptureWebServiceException">
</wsdl:fault>
</wsdl:operation>
<xs:complexType name="changeRecordingResponse">
<xs:sequence>
<xs:element name="return" type="xs:boolean"/>
</xs:sequence>
</xs:complexType>
Я создал прокси-классы в C #, который интерпретирует это как -
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestNamespace = "http://webservice.sdk.ingest.automation.avid.com/", ResponseNamespace = "http://webservice.sdk.ingest.automation.avid.com/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
[return: System.Xml.Serialization.XmlElementAttribute("return", Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
public bool changeRecording([System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] userCredentials userCredentials, [System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] scheduleChangeParams changeEvent)
{
object[] results = this.Invoke("changeRecording", new object[] {
userCredentials,
changeEvent});
return ((bool)(results[0]));
}
Обратите внимание, что метод changeRecording и тип возвращаемого значения bool.
Я вызываю эту веб-службу в коде -
bool result = avidClient.changeRecording(<params>);
, но получаю следующую ошибку -
System.Web.Services.Protocols.SoapHeaderException: Unmarshalling Error: null
at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
at ScheduleClientService.changeRecording(userCredentials userCredentials, scheduleChangeParams changeEvent)
Похоже, веб-служба возвращает значение NULLвместо логического.И именно поэтому демаршализация / десериализация терпит неудачу.
Верно ли мое предположение?Ошибка в сервисе или я что-то делаю неправильно?