Tengo un servicio de WCF:La unión no funciona en "modo dual" (webHttpBinding y basicHttpBinding)
<%@ ServiceHost Language="C#" Debug="true" Service="IWW.MIGTurbo2.WCF.Security.SecurityBroker" Factory="System.ServiceModel.Activation.WebScriptServiceHostFactory" %>
Esto funciona muy bien usar webHttpBinding de mi proyecto web.
También quiero que este servicio pueda ser utilizado por un cliente WinForms, por lo que he agregado un enlace basicHttpBinding.
Mi archivo de configuración del servidor es actualmente:
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
<behaviors>
<endpointBehaviors>
<behavior name="webScriptEnablingBehavior">
<enableWebScript />
</behavior>
<behavior name="webHttpEnablingBehaviour">
<webHttp />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="webHttpEnablingBehaviour">
<serviceMetadata httpGetEnabled="true" />
</behavior>
<behavior name="webScriptEnablingBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="IWW.MIGTurbo2.WCF.Security.SecurityBroker" behaviorConfiguration="webHttpEnablingBehaviour">
<endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
<!-- This works for web-clients -->
<endpoint address=""
binding="webHttpBinding"
bindingConfiguration="default"
contract="IWW.MIGTurbo2.WCF.Security.ISecurityBroker"
behaviorConfiguration="webHttpEnablingBehaviour">
</endpoint>
<!-- This is for WinForms clients, but isn't working -->
<endpoint address=""
binding="basicHttpBinding"
bindingConfiguration="default"
contract="IWW.MIGTurbo2.WCF.Security.ISecurityBroker"
behaviorConfiguration="webHttpEnablingBehaviour">
</endpoint>
</service>
</services>
<client />
<bindings>
<webHttpBinding>
<binding name="default" ></binding>
</webHttpBinding>
<basicHttpBinding>
<binding name="default" allowCookies="true"></binding>
</basicHttpBinding>
</bindings>
La sección marcada para WinForms no parece funcionar. Obtengo una excepción:
The endpoint at ' http://localhost:56125/MIGTurbo2_WEB/api/wcf/SecurityBroker.svc ' does not have a Binding with the None MessageVersion. 'System.ServiceModel.Description.WebHttpBehavior' is only intended for use with WebHttpBinding or similar bindings.
Cuando intento buscar manualmente el archivo .svc con IE. Obviamente, el cliente de WinForms no quiere saber.
¿Alguien puede difundir alguna luz sobre por qué no está funcionando? Casi parece que no puedo tener más de un punto final o el segundo punto final no está configurado correctamente? Google no ofrece nada que sea particularmente útil.
¿Cómo se aloja el servicio? Noté que ninguno de los puntos extremos tiene una dirección configurada y no hay una dirección base definida en la muestra que proporcionó. Además, ¿por qué su aplicación winforms no pudo usar la webHttpBinding? –
El servicio se aloja en una carpeta "api" del proyecto del sitio web. Esto está actualmente detrás de ASP.NET Dev Server, aunque finalmente estará detrás de IIS. No he especificado ninguna dirección porque no quiero vincularme a ningún servidor fijo en este momento. El proyecto debe poder implementarse en varias URL y, si es posible, no desea atarlo. (Estoy usando el código para generar la URL) –
He eliminado basicHttpBinding, y ahora estoy usando el webHttpBinding, pero ahora aparece un error: "{" No había ningún punto extremo escuchando en http: // localhost: 56125/MIGTurbo2_WEB/api/wcf/SecurityBroker.svc que podría aceptar el mensaje. Esto a menudo es causado por una dirección incorrecta o acción SOAP. Consulte InnerException, si está presente, para obtener más detalles. "}" Que solo contiene una InnerException que contiene un 404. Veo la dirección en IE y obtengo la página de servicio amigable en IE. –