Un servicio WCF - dos clientes; Un cliente no funciona

Tengo un servicio WCF y dos clientes de aplicaciones de consola.

Servicio: el código de servicio se crea a partir de un contacto wsdl utilizando la herramienta WCSF Blue.

Cliente 1: este cliente está usando wsdl que se obtiene al buscar el archivo svc. Este archivo wsdl examinado es ligeramente diferente del archivo wsdl del contrato.

Cliente 2: este cliente se crea utilizando el contrato original de wsdl.

Cleint1 está funcionando bien. El cliente 2 no está funcionando. ¿Qué todos podrían ser problemas potenciales?

El archivo App.Config de ambos clientes se ve similar, solo cambia el nombre. Creo que el problema estará en el código C # del cliente generado, probablemente en elAcciónRespuestaAcción. ¿Qué hay que corregir aquí?

Una diferencia notable es en Acción y Respuesta.

Cliente 1:

Acción = "urn: lijo: demos: multiplyservice: cálculo: v1 / ICalculationService / GetMultiplied", ReplyAction = "urn: lijo: demos: multiplyservice: cálculo: v1 / ICalculationService / GetMultipliedied" + "sponse"

Cliente 2:

Action = "urn: lijo: demos: multiplyservice: cálculo: v1: getMultipliedIn", ReplyAction = "*"

Mensaje de rastreo

El mensaje con Action 'urn: lijo: demos: multiplyservice: cálculo: v1: getMultipliedIn' no se puede procesar en el receptor, debido a una falta de coincidencia de ContractFilter en EndpointDispatcher. Esto puede deberse a una falta de coincidencia del contrato (Acciones no coincidentes entre el remitente y el receptor) o una falta de coincidencia de enlace / seguridad entre el remitente y el receptor. Compruebe que el remitente y el receptor tienen el mismo contrato y el mismo enlace (incluidos los requisitos de seguridad, por ejemplo, Mensaje, Transporte, Ninguno).

EDITAR

Esto se puede corregir cambiando la Acción y la Acción de respuesta de la siguiente manera (Se copió del Servicio).

  [System.ServiceModel.OperationContractAttribute(Action = "urn:lijo:demos:multiplyservice:calculation:v1/ICalculationService/getMultiplied", ReplyAction = "urn:lijo:demos:multiplyservice:calculation:v1/ICalculationService/getMultipliedRe" +
        "sponse")]

Nota: es importante asegurarse de que la carcasa en el servicio sea correcta (es decir, getMultiplied no GetMultiplied)

Copiar desde el servicio no es una buena opción, aunque funciona. ¿Cuál sería la acción correcta y ReplyAction?

Además, ¿puede por favor indicar cómomodifique el wsdl para que la ReplyAction sea correcta en el proxy del cliente generado? Esa es la parte esencial para marcarla como contestada.

WCF: Acciones, Asterisco y Metadatos

WsdlExporter, que se utiliza para la publicación de metadatos, ignora las operaciones con acciones de asterisco (tanto Action como ReplyAction).

DesdePropiedad MSDN -ReplyAction

La especificación de un asterisco en el servicio le indica a WCF que no agregue una acción de respuesta al mensaje, lo cual es útil si está programando mensajes directamente.

Referencias:

Operaciones que faltan metadatos WCF

RestaurantData.xsd

 <?xml version="1.0" encoding="utf-8" ?>
 <xs:schema id="RestaurantData" targetNamespace="urn:lijo:demos:multiplyservice:data:v1"
    elementFormDefault="qualified" xmlns="urn:lijo:demos:multiplyservice:data:v1"
    xmlns:mstns="urn:lijo:demos:multiplyservice:data:v1" xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:complexType name="multipliedResult">
  <xs:sequence>
  <xs:element name="resultNumber" type="xs:int" />
   </xs:sequence>
   </xs:complexType>

  </xs:schema>

Contrato original wsdl

 <definitions xmlns:import0="urn:lijo:demos:multiplyservice:messages:v1" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:import1="urn:lijo:demos:multiplyservice:data:v1" xmlns:tns="urn:lijo:demos:multiplyservice:calculation:v1" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" name="CalculationService" targetNamespace="urn:lijo:demos:multiplyservice:calculation:v1" xmlns="http://schemas.xmlsoap.org/wsdl/">

 <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" />
 <types>
 <xsd:schema>
  <xsd:import schemaLocation="C:\toolbox\LijosServiceApp\NewService\RestaurantMessages.xsd" namespace="urn:lijo:demos:multiplyservice:messages:v1" />
  <xsd:import schemaLocation="C:\toolbox\LijosServiceApp\NewService\RestaurantData.xsd" namespace="urn:lijo:demos:multiplyservice:data:v1" />
</xsd:schema>
</types>
<message name="getMultipliedIn">
<wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" />
<part name="parameters" element="import0:getMultiplied" />
</message>
<message name="getMultipliedOut">
<wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" />
<part name="parameters" element="import0:getMultipliedResponse" />
</message>
<portType name="CalculationServiceInterface">
<wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" />
<operation name="getMultiplied">
  <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" />
  <input message="tns:getMultipliedIn" />
  <output message="tns:getMultipliedOut" />
</operation>
</portType>
<binding name="BasicHttpBinding_CalculationServiceInterface" type="tns:CalculationServiceInterface">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
<operation name="getMultiplied">
  <soap:operation soapAction="urn:lijo:demos:multiplyservice:calculation:v1:getMultipliedIn" style="document" />
  <input>
    <soap:body use="literal" />
  </input>
  <output>
    <soap:body use="literal" />
  </output>
 </operation>
 </binding>
 <service name="CalculationServicePort">
 <port name="CalculationServicePort" binding="tns:BasicHttpBinding_CalculationServiceInterface">
  <soap:address location="http://localhost/CalculationService" />
 </port>
 </service>
 </definitions>

Respuestas a la pregunta(2)

Su respuesta a la pregunta