2011-09-28 22 views
22

He creado un servicio de trabajo WCF. Ahora quiero agregarle algo de seguridad para filtrar direcciones Ip. He seguido el ejemplo que Microsoft publica en los ejemplos para tratar de agregar un IDispatchMessageInspector que generará una llamada a AfterReceiveRequest y arrojará un error si la dirección IP no está en la lista permitida.¿Por qué mi servicio WCF da el mensaje 'no tiene un enlace con ninguno MessageVersion'?

Después de mirar el código; lo han configurado usando 'wsHttpBinding', sin embargo, quiero usar 'webHttpBinding' o 'basicHttpBinding'. Pero cuando lo configuro me sale el error:

The endpoint at 'http://upload/api/Api.svc/soap' does not have a Binding with the None MessageVersion. 'System.ServiceModel.Description.WebHttpBehavior' is only intended for use with WebHttpBinding or similar bindings.

Mi configuración es:

<system.serviceModel> 


    <serviceHostingEnvironment multipleSiteBindingsEnabled="true"> 
    </serviceHostingEnvironment> 
    <!--Set up the service--> 
    <services> 
     <service behaviorConfiguration="SOAPRESTDemoBehavior" name="HmlApi"> 
     <endpoint address="rest" binding="webHttpBinding" contract="VLSCore2.Interfaces.IHmlApi" behaviorConfiguration="SOAPRESTDemoEndpointBehavior" /> 
     <endpoint address="soap" binding="basicHttpBinding" contract="VLSCore2.Interfaces.IHmlApi" behaviorConfiguration="SOAPRESTDemoEndpointBehavior" /> 
     </service> 
    </services> 

    <!--Define the behaviours--> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="SOAPRESTDemoBehavior"> 
      <serviceMetadata httpGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
     </behavior> 
     </serviceBehaviors> 

     <!---Endpoint --> 
     <endpointBehaviors> 
     <behavior name="SOAPRESTDemoEndpointBehavior"> 
      <ipFilter/> 
      <webHttp /> 
     </behavior> 
     </endpointBehaviors> 
    </behaviors> 

    <extensions> 
     <behaviorExtensions> 
     <add name="ipFilter" type="VLSCore2.Api.IpFilterBehaviourExtensionElement, VLSCore2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/> 
     </behaviorExtensions> 
    </extensions> 

    </system.serviceModel> 

Entonces, ¿qué estoy preguntando es cómo puedo configurar mi mensaje inspector sin utilizar WebHttpBinding. ¿Esto es posible?

Quiero usar jabón 'basicHttpBinding' no wsHttpBinding (y todos los WS *) los gastos generales asociados ....

Respuesta

35

Esto es simplemente pasando porque se ha configurado una sola endpointBehavior tanto para el SOAP y REST puntos finales pero el punto final SOAP no puede tener el comportamiento webHttp. Es necesario dividir éstos, aparte de modo que son:

<endpointBehaviors> 
    <behavior name="SOAPDemoEndpointBehavior"> 
     <ipFilter/> 
    </behavior> 
    <behavior name="RESTDemoEndpointBehavior"> 
     <ipFilter/> 
     <webHttp /> 
    </behavior> 
    </endpointBehaviors> 

y luego los puntos finales deben ser:

<endpoint address="rest" binding="webHttpBinding" contract="VLSCore2.Interfaces.IHmlApi" behaviorConfiguration="RESTDemoEndpointBehavior" /> 
    <endpoint address="soap" binding="basicHttpBinding" contract="VLSCore2.Interfaces.IHmlApi" behaviorConfiguration="SOAPDemoEndpointBehavior" /> 
+0

Muchas gracias esto era perfecto. Es justo decir que creo que es importante configurar todos los puntos finales correctos para un servicio ahora. – Exitos

+0

Hombre que ya estaba luchando por un par de horas y llegué aquí para darme cuenta de que no he cambiado el enlace :))) Estaba usando lo básico para la solicitud de http desde una aplicación móvil ... thumb up + – dpaul1994

Cuestiones relacionadas