visual studio implement consumir consume c# wcf

c# - studio - ¿Por qué mi servicio WCF da el mensaje ''no tiene un enlace con la None MessageVersion''?



wcf soap service c# (2)

Esto simplemente está sucediendo porque ha configurado un comportamiento de punto final único para los puntos finales SOAP y REST, pero el punto final SOAP no puede tener el comportamiento webHttp. Necesitas dividir estos para que sean:

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

y luego tus puntos finales deberían ser:

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

He creado un servicio WCF que funciona. 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.

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

El punto final en ''http: //upload/api/Api.svc/soap'' no tiene un enlace con None MessageVersion. ''System.ServiceModel.Description.WebHttpBehavior'' solo está pensado para usar con WebHttpBinding o enlaces similares.

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, me pregunto cómo puedo configurar mi inspector de mensajes sin usar WebHttpBinding. ¿Esto es posible?

Quiero utilizar SOAP ''basicHttpBinding'' no wsHttpBinding (y todos los WS *) asociados a los gastos generales ...


Para mí, esto fue porque tenía un ''webHttp'' definido como un comportamiento para una configuración SOAP. Solo su ausencia lo resolvió ...