У меня есть следующий WSDL
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns:tns="${namespace}" xmlns:wsr="http://www.openuri.org/2002/10/soap/reliability/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:soap12enc="http://www.w3.org/2003/05/soap-encoding" xmlns:conv="http://www.openuri.org/2002/04/wsdl/conversation/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="${namespace}">
<message name="addADetails">
<part xmlns:partns="http://www.w3.org/2001/XMLSchema" type="partns:string" name="string">
</part>
<part xmlns:partns="http://www.w3.org/2001/XMLSchema" type="partns:string" name="string0">
</part>
<part xmlns:partns="http://www.w3.org/2001/XMLSchema" type="partns:string" name="string1">
</part>
<part xmlns:partns="http://www.w3.org/2001/XMLSchema" type="partns:string" name="string2">
</part>
<part xmlns:partns="http://www.w3.org/2001/XMLSchema" type="partns:string" name="string3">
</part>
<part xmlns:partns="http://www.w3.org/2001/XMLSchema" type="partns:int" name="intVal">
</part>
<part xmlns:partns="http://www.w3.org/2001/XMLSchema" type="partns:string" name="string4">
</part>
<part xmlns:partns="http://www.w3.org/2001/XMLSchema" type="partns:string" name="string5">
</part>
<part xmlns:partns="http://www.w3.org/2001/XMLSchema" type="partns:string" name="string6">
</part>
<part xmlns:partns="http://www.w3.org/2001/XMLSchema" type="partns:string" name="string7">
</part>
<part xmlns:partns="http://www.w3.org/2001/XMLSchema" type="partns:string" name="string8">
</part>
</message>
<message name="addADetailsResponse">
<part xmlns:partns="http://www.w3.org/2001/XMLSchema" type="partns:string" name="result">
</part>
</message>
<message name="addBDetails">
<part xmlns:partns="http://www.w3.org/2001/XMLSchema" type="partns:string" name="string">
</part>
<part xmlns:partns="http://www.w3.org/2001/XMLSchema" type="partns:string" name="string0">
</part>
<part xmlns:partns="http://www.w3.org/2001/XMLSchema" type="partns:string" name="string1">
</part>
<part xmlns:partns="http://www.w3.org/2001/XMLSchema" type="partns:string" name="string2">
</part>
<part xmlns:partns="http://www.w3.org/2001/XMLSchema" type="partns:string" name="string3">
</part>
<part xmlns:partns="http://www.w3.org/2001/XMLSchema" type="partns:string" name="string4">
</part>
<part xmlns:partns="http://www.w3.org/2001/XMLSchema" type="partns:string" name="string5">
</part>
</message>
<message name="addBDetailsResponse">
<part xmlns:partns="http://www.w3.org/2001/XMLSchema" type="partns:string" name="result">
</part>
</message>
<message name="deleteCDetails">
<part xmlns:partns="http://www.w3.org/2001/XMLSchema" type="partns:string" name="string">
</part>
<part xmlns:partns="http://www.w3.org/2001/XMLSchema" type="partns:string" name="string0">
</part>
<part xmlns:partns="http://www.w3.org/2001/XMLSchema" type="partns:string" name="string1">
</part>
</message>
<message name="deleteCDetailsResponse">
<part xmlns:partns="http://www.w3.org/2001/XMLSchema" type="partns:string" name="result">
</part>
</message>
<message name="queryDDetails">
<part xmlns:partns="http://www.w3.org/2001/XMLSchema" type="partns:string" name="string">
</part>
<part xmlns:partns="http://www.w3.org/2001/XMLSchema" type="partns:string" name="string0">
</part>
<part xmlns:partns="http://www.w3.org/2001/XMLSchema" type="partns:string" name="string1">
</part>
</message>
<message name="queryDDetailsResponse">
<part xmlns:partns="http://www.w3.org/2001/XMLSchema" type="partns:string" name="result">
</part>
</message>
<message name="queryEDetails">
<part xmlns:partns="http://www.w3.org/2001/XMLSchema" type="partns:string" name="string">
</part>
<part xmlns:partns="http://www.w3.org/2001/XMLSchema" type="partns:string" name="string0">
</part>
</message>
<message name="queryEDetailsResponse">
<part xmlns:partns="http://www.w3.org/2001/XMLSchema" type="partns:string" name="result">
</part>
</message>
<message name="updateFDetails">
<part xmlns:partns="http://www.w3.org/2001/XMLSchema" type="partns:string" name="string">
</part>
<part xmlns:partns="http://www.w3.org/2001/XMLSchema" type="partns:string" name="string0">
</part>
<part xmlns:partns="http://www.w3.org/2001/XMLSchema" type="partns:string" name="string1">
</part>
<part xmlns:partns="http://www.w3.org/2001/XMLSchema" type="partns:string" name="string2">
</part>
<part xmlns:partns="http://www.w3.org/2001/XMLSchema" type="partns:string" name="string3">
</part>
<part xmlns:partns="http://www.w3.org/2001/XMLSchema" type="partns:int" name="intVal">
</part>
<part xmlns:partns="http://www.w3.org/2001/XMLSchema" type="partns:string" name="string4">
</part>
<part xmlns:partns="http://www.w3.org/2001/XMLSchema" type="partns:string" name="string5">
</part>
<part xmlns:partns="http://www.w3.org/2001/XMLSchema" type="partns:string" name="string6">
</part>
<part xmlns:partns="http://www.w3.org/2001/XMLSchema" type="partns:string" name="string7">
</part>
<part xmlns:partns="http://www.w3.org/2001/XMLSchema" type="partns:string" name="string8">
</part>
</message>
<message name="updateFDetailsResponse">
<part xmlns:partns="http://www.w3.org/2001/XMLSchema" type="partns:string" name="result">
</part>
</message>
<message name="updateGDetails">
<part xmlns:partns="http://www.w3.org/2001/XMLSchema" type="partns:string" name="string">
</part>
<part xmlns:partns="http://www.w3.org/2001/XMLSchema" type="partns:string" name="string0">
</part>
<part xmlns:partns="http://www.w3.org/2001/XMLSchema" type="partns:string" name="string1">
</part>
<part xmlns:partns="http://www.w3.org/2001/XMLSchema" type="partns:string" name="string2">
</part>
<part xmlns:partns="http://www.w3.org/2001/XMLSchema" type="partns:string" name="string3">
</part>
<part xmlns:partns="http://www.w3.org/2001/XMLSchema" type="partns:string" name="string4">
</part>
<part xmlns:partns="http://www.w3.org/2001/XMLSchema" type="partns:string" name="string5">
</part>
</message>
<message name="updateGDetailsResponse">
<part xmlns:partns="http://www.w3.org/2001/XMLSchema" type="partns:string" name="result">
</part>
</message>
<portType name="TestServicePort">
<operation name="addADetails">
<input message="tns:addADetails">
</input>
<output message="tns:addADetailsResponse">
</output>
</operation>
<operation name="addBDetails">
<input message="tns:addBDetails">
</input>
<output message="tns:addBDetailsResponse">
</output>
</operation>
<operation name="deleteCDetails">
<input message="tns:deleteCDetails">
</input>
<output message="tns:deleteCDetailsResponse">
</output>
</operation>
<operation name="queryDDetails">
<input message="tns:queryDDetails">
</input>
<output message="tns:queryDDetailsResponse">
</output>
</operation>
<operation name="queryEDetails">
<input message="tns:queryEDetails">
</input>
<output message="tns:queryEDetailsResponse">
</output>
</operation>
<operation name="updateFDetails">
<input message="tns:updateFDetails">
</input>
<output message="tns:updateFDetailsResponse">
</output>
</operation>
<operation name="updateGDetails">
<input message="tns:updateGDetails">
</input>
<output message="tns:updateGDetailsResponse">
</output>
</operation>
</portType>
<binding type="tns:TestServicePort" name="TestServicePort">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="addADetails">
<soap:operation style="rpc" soapAction=""/>
<input>
<soap:body namespace="${namespace}" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded"/>
</input>
<output>
<soap:body namespace="${namespace}" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded"/>
</output>
</operation>
<operation name="addBDetails">
<soap:operation style="rpc" soapAction=""/>
<input>
<soap:body namespace="${namespace}" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded"/>
</input>
<output>
<soap:body namespace="${namespace}" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded"/>
</output>
</operation>
<operation name="deleteCDetails">
<soap:operation style="rpc" soapAction=""/>
<input>
<soap:body namespace="${namespace}" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded"/>
</input>
<output>
<soap:body namespace="${namespace}" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded"/>
</output>
</operation>
<operation name="queryDDetails">
<soap:operation style="rpc" soapAction=""/>
<input>
<soap:body namespace="${namespace}" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded"/>
</input>
<output>
<soap:body namespace="${namespace}" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded"/>
</output>
</operation>
<operation name="queryEDetails">
<soap:operation style="rpc" soapAction=""/>
<input>
<soap:body namespace="${namespace}" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded"/>
</input>
<output>
<soap:body namespace="${namespace}" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded"/>
</output>
</operation>
<operation name="updateFDetails">
<soap:operation style="rpc" soapAction=""/>
<input>
<soap:body namespace="${namespace}" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded"/>
</input>
<output>
<soap:body namespace="${namespace}" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded"/>
</output>
</operation>
<operation name="updateGDetails">
<soap:operation style="rpc" soapAction=""/>
<input>
<soap:body namespace="${namespace}" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded"/>
</input>
<output>
<soap:body namespace="${namespace}" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded"/>
</output>
</operation>
</binding>
<service name="TestService">
<port name="TestServicePort" binding="tns:TestServicePort">
<soap:address location="http://testserver:7001/test/TestService"/>
</port>
</service>
</definitions>
У меня есть прокси-класс, который вызывает веб-сервис, описанный WSDL. Мне нужно создать новый сервис WCF, который можно вызывать с тем же прокси-классом.
Я использовал первый инструмент контракта WSCF.blue для веб-сервисов ThinkTecture, чтобы создать заглушку на стороне службы WCF:
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
[System.ServiceModel.ServiceContractAttribute(Namespace="${namespace}", ConfigurationName="ITestServicePort")]
public interface ITestServicePort
{
[System.ServiceModel.OperationContractAttribute(Action="${namespace}/ITestServicePort/addADetails", ReplyAction="${namespace}/ITestServicePort/addADetailsResponse")]
[System.ServiceModel.XmlSerializerFormatAttribute(Style=System.ServiceModel.OperationFormatStyle.Rpc, SupportFaults=true, Use=System.ServiceModel.OperationFormatUse.Encoded)]
[return: System.ServiceModel.MessageParameterAttribute(Name="result")]
string addADetails(string @string, string string0, string string1, string string2, string string3, int intVal, string string4, string string5, string string6, string string7, string string8);
[System.ServiceModel.OperationContractAttribute(Action="${namespace}/ITestServicePort/addBDetails", ReplyAction="${namespace}/ITestServicePort/addBDetailsResponse")]
[System.ServiceModel.XmlSerializerFormatAttribute(Style=System.ServiceModel.OperationFormatStyle.Rpc, SupportFaults=true, Use=System.ServiceModel.OperationFormatUse.Encoded)]
[return: System.ServiceModel.MessageParameterAttribute(Name="result")]
string addBDetails(string @string, string string0, string string1, string string2, string string3, string string4, string string5);
[System.ServiceModel.OperationContractAttribute(Action="${namespace}/ITestServicePort/deleteCDetails", ReplyAction="${namespace}/ITestServicePort/deleteCDetailsResponse")]
[System.ServiceModel.XmlSerializerFormatAttribute(Style=System.ServiceModel.OperationFormatStyle.Rpc, SupportFaults=true, Use=System.ServiceModel.OperationFormatUse.Encoded)]
[return: System.ServiceModel.MessageParameterAttribute(Name="result")]
string deleteCDetails(string @string, string string0, string string1);
[System.ServiceModel.OperationContractAttribute(Action="${namespace}/ITestServicePort/queryDDetails", ReplyAction="${namespace}/ITestServicePort/queryDDetailsResponse")]
[System.ServiceModel.XmlSerializerFormatAttribute(Style=System.ServiceModel.OperationFormatStyle.Rpc, SupportFaults=true, Use=System.ServiceModel.OperationFormatUse.Encoded)]
[return: System.ServiceModel.MessageParameterAttribute(Name="result")]
string queryDDetails(string @string, string string0, string string1);
[System.ServiceModel.OperationContractAttribute(Action="${namespace}/ITestServicePort/queryEDetails", ReplyAction="${namespace}/ITestServicePort/queryEDetailsResponse")]
[System.ServiceModel.XmlSerializerFormatAttribute(Style=System.ServiceModel.OperationFormatStyle.Rpc, SupportFaults=true, Use=System.ServiceModel.OperationFormatUse.Encoded)]
[return: System.ServiceModel.MessageParameterAttribute(Name="result")]
string queryEDetails(string @string, string string0);
[System.ServiceModel.OperationContractAttribute(Action="${namespace}/ITestServicePort/updateFDetails", ReplyAction="${namespace}/ITestServicePort/updateFDetailsResponse")]
[System.ServiceModel.XmlSerializerFormatAttribute(Style=System.ServiceModel.OperationFormatStyle.Rpc, SupportFaults=true, Use=System.ServiceModel.OperationFormatUse.Encoded)]
[return: System.ServiceModel.MessageParameterAttribute(Name="result")]
string updateFDetails(string @string, string string0, string string1, string string2, string string3, int intVal, string string4, string string5, string string6, string string7, string string8);
[System.ServiceModel.OperationContractAttribute(Action="${namespace}/ITestServicePort/updateGDetails", ReplyAction="${namespace}/ITestServicePort/updateGDetailsResponse")]
[System.ServiceModel.XmlSerializerFormatAttribute(Style=System.ServiceModel.OperationFormatStyle.Rpc, SupportFaults=true, Use=System.ServiceModel.OperationFormatUse.Encoded)]
[return: System.ServiceModel.MessageParameterAttribute(Name="result")]
string updateGDetails(string @string, string string0, string string1, string string2, string string3, string string4, string string5);
}
Проблема в том, что когда я использую существующий прокси-класс для вызова моей новой службы, происходит сбой с SoapHeaderException:
Сообщение с действием '' не может быть
обработано в приемнике, из-за
Несоответствие ContractFilter в
EndpointDispatcher. Это может быть
из-за несоответствия контракта
(несоответствующие действия между отправителем и
получатель) или привязка / безопасность
несоответствие между отправителем и
получатель. Проверьте отправителя и
получатель имеет тот же контракт и
та же привязка (включая безопасность
требования, например Сообщение, Транспорт,
Нет).
Когда я заменяю один из членов Action в OperationContractAttribute на пустую строку, я могу успешно вызвать эту операцию. Когда я пытаюсь изменить несколько действий, чтобы очистить один и тот же вызов, происходит сбой со следующей ошибкой:
Клиент обнаружил тип содержимого ответа
'', но ожидаемый 'text / xml'.
запрос не выполнен с пустым ответом.
Кажется, что вы не можете выполнить более одной операции с пустым действием. Это верно?
Как бы я решил эту проблему? Есть предложения?
Спасибо