Pregunta

Tengo mi servicio WCF, he creado referencia a ella desde MSTest proyecto. Aquí es ejemplo de cómo estoy llamando métodos de servicio:

IEnrollmentService serviceClient = ChannelFactory<IEnrollmentService>
    .CreateChannel(new BasicHttpBinding(),
                   new EndpointAddress("http://localhost/EnrollmentService.svc"));

PublishResult res = serviceClient.PublishEnrollmentProfile(...);

En lugar de ejecución Tengo el siguiente error:

La aplicación de tipo de contenido / xml; charset = utf-8 del mensaje de respuesta no coincide con el tipo de contenido del de unión (texto / xml; charset = utf-8). Si utilizando un codificador de costumbre, asegúrese de que el método IsContentTypeSupported es implementado correctamente. El primer 710 bytes de la respuesta eran: 'mensaje con Sendera:ActionNotSupportedThe Acción '' no puede ser procesada en el receptor, debido a una ContractFilter desajuste en el EndpointDispatcher. Esto puede ser debido a cualquiera de una desajuste contrato (acciones que no coinciden entre emisor y receptor) o una desajuste / seguridad entre la unión remitente y el receptor. Mira esto remitente y el receptor tienen la misma contrato y la unión misma (Incluyendo los requisitos de seguridad, por ejemplo Mensaje, Transporte, Ninguna).'. ---> System.NET.WebException: El control remoto servidor devuelve un error: (500) Error interno del servidor ..

Por lo que he entendido, hay algunos problemas entre ContractFilter y EndpointDispatcher. He tratado de goodgle, pero no encontró nada comprensible ...

También he probado con los métodos de servicios de llamadas de WCF de otra manera:

EnrollmentServiceClient serviceClient = new EnrollmentServiceClient("http://localhost/EnrollmentService.svc");

PublishResult res = serviceClient.PublishEnrollmentProfile(...);

Eso me vuelve otro error:

No se pudo encontrar elemento de punto final con nombre ' http: //localhost/McActivation/EnrollmentService.svc ' y el contrato 'EnrollmentServiceReference.IEnrollmentService' en el cliente ServiceModel sección de configuración. Esto podría ser porque ningún archivo de configuración se encontrado para su aplicación, o porque ningún elemento punto final a juego este nombre se pudo encontrar en el elemento cliente ..

Pregunta 1:

¿Qué es una forma correcta de crear una instancia de cliente de servicio WCF?

preguntas2:

Lo que está mal en mi caso?

Muchas gracias.

P.S. Con algunos problemas que pueda conectarse a un servicio con WcfTestClient, más detalles aquí: WCF servicio: No se puede llamar a los métodos a través del punto final 'WebHttpBinding'

P.P.S. Aquí está la configuración del servicio WCF lado del servidor:

<system.serviceModel>
<services>
  <service name="McActivationApp.EnrollmentService" behaviorConfiguration="McActivationApp.EnrollmentServicBehavior">
    <endpoint address="" binding="webHttpBinding" contract="McActivationApp.IEnrollmentService"/>
    <endpoint address="mex" binding="mexHttpBinding" contract="McActivationApp.IEnrollmentService" />
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="McActivationApp.EnrollmentServicBehavior">
      <serviceMetadata httpGetEnabled="True"/>
      <serviceDebug includeExceptionDetailInFaults="False" />
    </behavior>
  </serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
</system.serviceModel>
¿Fue útil?

Solución

Su problema es el siguiente: servicio de configuración define un webHttpBinding puntos finales - que es un punto final RESTO ( "XML sobre HTTP") ....

Sin embargo, el cliente utiliza un basicHttpBinding y esto es un de SOAP vinculantes - esas son no compatibles

Es necesario cambiar esta asegurarse de que el extremo de servicio (s) ofrecidos por el lado del servicio son tales que el cliente puede conectarse a él.

Así que:

  • o bien añadir otro punto final a su configuración de servicio con la basicHttpBinding y conectarse a ese punto final

o

  • cambiar de lado del cliente para el uso webHttpBinding
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top