WCF: No se puede llamar propio servicio WCF
-
09-10-2019 - |
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:ActionNotSupported
The 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>
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