visual studio ejemplo crear consumir consume c# wcf web-services

c# - studio - Excepción de WCF: no se pudo encontrar una dirección base que coincida con el esquema http para el punto final



web service c# (7)

Estoy intentando alojar un servicio web de WCF en un sitio web separado en IIS con https en 443 como el único enlace.

Las siguientes configuraciones funcionan bien cuando lo uso en un sitio web que usa ambos enlaces (http (80) / https (443)). Si elimino el enlace http, comienza a lanzar el siguiente error.

No se pudo encontrar una dirección base que coincida con el esquema http para el punto final con el enlace BasicHttpBinding. Los esquemas de direcciones base registradas son [https].

¿Cómo puedo hacer que funcione en un sitio web de IIS solo con enlaces https?

<system.serviceModel> <bindings> <basicHttpBinding> <binding name="defaultBasicHttpBinding"> <security mode="Transport"> <transport clientCredentialType="None" proxyCredentialType="None" realm=""/> <message clientCredentialType="Certificate" algorithmSuite="Default" /> </security> </binding> </basicHttpBinding> </bindings> <client> <endpoint address="http://localhost/ERPService/retailPayment.svc" binding="basicHttpBinding" bindingConfiguration="defaultBasicHttpBinding" contract="RetailPaymentService.RetailPayment.SVRetailPaymentService" name="EnterpriseRetailPayment" /> </client> <behaviors> <serviceBehaviors> <behavior name="MyServiceTypeBehaviors"> <serviceMetadata httpGetEnabled="true" /> <serviceDebug includeExceptionDetailInFaults="true" /> </behavior> <behavior> <serviceMetadata httpGetEnabled="true" /> <serviceDebug includeExceptionDetailInFaults="true" /> </behavior> </serviceBehaviors> <endpointBehaviors> <behavior name="MyEndPointBehavior"> <!--<SchemaValidator enabled="true"/>--> </behavior> </endpointBehaviors> </behaviors> <services> <service name="SettlementSalesCollection.SaleItemService" behaviorConfiguration="MyServiceTypeBehaviors"> <endpoint behaviorConfiguration="MyEndPointBehavior" binding="basicHttpBinding" name="SettlementSalesCollection" contract="SettlementSalesCollection.CITransactionSettlementListenerService" /> <endpoint name="mexEndpoint" contract="IMetadataExchange" binding="mexHttpBinding" address="mex" /> </service> </services> <extensions> <behaviorExtensions> <add name="SchemaValidator" type="SettlementSalesCollection.SchemaValidation.SchemaValidationBehavior+CustomBehaviorSection, SettlementSalesCollectionService, Version=1.0.0.0, Culture=neutral" /> </behaviorExtensions> </extensions> <protocolMapping> <add binding="basicHttpsBinding" scheme="https" /> </protocolMapping> <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /> </system.serviceModel>


Abra IIS y haga clic con el botón derecho en Grupo de aplicaciones predeterminado y Agregar enlace para hacer que la aplicación funcione con el protocolo HTTPS.

tipo: https

Dirección IP: todas sin asignar

puerto no: 443

Certificado SSL: WMSVC

entonces

Haga clic en y reinicie IIS

Hecho


En mi caso, el nombre de enlace en la asignación de protocolo no coincide con el nombre de enlace en el punto final. Ellos coinciden en el siguiente ejemplo.

<endpoint address="" binding="basicHttpsBinding" contract="serviceName" />

y

<protocolMapping> <add binding="basicHttpsBinding" scheme="https" /> </protocolMapping>


Intenté el enlace de acuerdo con la respuesta de @Szymon pero no funcionó para mí. Intenté basicHttpsBinding que es nuevo en .net 4.5 y resolvió el problema. Aquí está la configuración completa que me funciona.

<system.serviceModel> <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="false" /> <behaviors> <serviceBehaviors> <behavior> <serviceMetadata httpGetEnabled="false" httpsGetEnabled="true"/> <serviceDebug includeExceptionDetailInFaults="true"/> </behavior> </serviceBehaviors> </behaviors> <bindings> <basicHttpsBinding> <binding name="basicHttpsBindingForYourService"> <security mode="Transport"> <transport clientCredentialType="None" proxyCredentialType="None"/> </security> </binding> </basicHttpsBinding> </bindings> <services> <service name="YourServiceName"> <endpoint address="" binding="basicHttpsBinding" bindingName="basicHttpsBindingForYourService" contract="YourContract" /> </service> </services> </system.serviceModel>

FYI: el marco objetivo de mi aplicación es 4.5.1. El sitio web de IIS que creé para implementar este servicio wcf solo tiene el enlace https habilitado.


Mi problema se debió a la falta de enlaces en IIS: haga clic con el botón derecho en el sitio> editar enlaces> agregar> https

Elija ''Certificado de desarrollo de IIS Express'' y establezca el puerto en 443. Luego agregué otro enlace a webconfig:

<endpoint address="wsHttps" binding="wsHttpBinding" bindingConfiguration="DefaultWsHttpBinding" name="Your.bindingname" contract="Your.contract" />

También se agregó a serviceBehaviours: <serviceMetadata httpGetEnabled="false" httpsGetEnabled="true" />

Y, finalmente, funcionó, ninguna de las soluciones que revisé en para este error era aplicable a mi escenario específico, por lo que incluir aquí en caso de que ayude a otros


Mi problema también se debió a la falta de enlace https en IIS: sitio web predeterminado seleccionado> En el panel derecho, enlaces seleccionados> agregar> https

Elija ''Certificado de desarrollo IIS Express'' y configure el puerto en 443


Puede obtener esto si SOLAMENTE configura https como un enlace de sitio dentro de IIS.

Debe agregar http(80) así como https(443) , al menos lo hice :-)


Su configuración debe ser similar a eso. Es posible que deba cambiar <transport clientCredentialType="None" proxyCredentialType="None" /> según sus necesidades de autenticación. La siguiente configuración no requiere ninguna autenticación.

<bindings> <basicHttpBinding> <binding name="basicHttpBindingConfiguration"> <security mode="Transport"> <transport clientCredentialType="None" proxyCredentialType="None" /> </security> </binding> </basicHttpBinding> </bindings> <services> <service name="XXX"> <endpoint name="AAA" address="" binding="basicHttpBinding" bindingConfiguration="basicHttpBindingConfiguration" contract="YourContract" /> </service> <services>

Eso permitirá que un servicio WCF con basicHttpBinding use HTTPS.