Pregunta El esquema de URI proporcionado 'https' no es válido; esperado 'http'. Nombre del parámetro: vía


Estoy intentando hacer que un servicio WCF sobre basicHttpBinding se use sobre https. Aquí está mi web.config:

<!-- language: xml -->
<service behaviorConfiguration="MyServices.PingResultServiceBehavior"
         name="MyServices.PingResultService">
    <endpoint address="" 
              binding="basicHttpBinding" 
              bindingConfiguration="defaultBasicHttpBinding"
              contract="MyServices.IPingResultService">
        <identity>
            <dns value="localhost" />
        </identity>
    </endpoint>
    <endpoint address="mex" 
              binding="mexHttpBinding" 
              contract="IMetadataExchange" />
</service>
...
<bindings>
  <basicHttpBinding>
    <binding name="defaultBasicHttpBinding">
      <security mode="Transport">
        <transport clientCredentialType="None"/>
      </security>
    </binding>
  </basicHttpBinding>
</bindings>
...
<behaviors>
  <serviceBehaviors>
    <behavior name="MyServices.UpdateServiceBehavior">
      <serviceMetadata httpsGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
  </serviceBehaviors>
</behaviors>

Me estoy conectando usando WCFStorm, que es capaz de recuperar todos los metadatos correctamente, pero cuando llamo al método real obtengo:

El esquema de URI proporcionado 'https' no es válido; esperado 'http'. Nombre del parámetro: vía


236
2018-03-12 20:53


origen


Respuestas:


Intente agregar credenciales de mensajes en su app.config como:

<bindings> 
<basicHttpBinding> 
<binding name="defaultBasicHttpBinding"> 
  <security mode="Transport"> 
    <transport clientCredentialType="None" proxyCredentialType="None" realm=""/> 
    <message clientCredentialType="Certificate" algorithmSuite="Default" />
  </security> 
</binding> 
</basicHttpBinding> 
</bindings> 

205
2018-03-15 03:14



Agregando esto como una respuesta, ya que no se puede hacer un gran formato en los comentarios.
Tuve el mismo problema, excepto que estaba creando y vinculando a mi cliente de servicio web por completo en código.
La razón es que el archivo DLL se estaba cargando en un sistema, lo que prohibía el uso de archivos de configuración.

Aquí está el código ya que necesitaba ser actualizado para comunicarse a través de SSL ...

Public Function GetWebserviceClient() As WebWorker.workerSoapClient
    Dim binding = New BasicHttpBinding()
    binding.Name = "WebWorkerSoap"
    binding.CloseTimeout = TimeSpan.FromMinutes(1)
    binding.OpenTimeout = TimeSpan.FromMinutes(1)
    binding.ReceiveTimeout = TimeSpan.FromMinutes(10)
    binding.SendTimeout = TimeSpan.FromMinutes(1)

    '// HERE'S THE IMPORTANT BIT FOR SSL
    binding.Security.Mode = BasicHttpSecurityMode.Transport

    Dim endpoint = New EndpointAddress("https://myurl/worker.asmx")

    Return New WebWorker.workerSoapClient(binding, endpoint)
End Function

42
2018-01-15 15:55



¿Está ejecutando esto en el Cassini (vs servidor de desarrollo) o en IIS con un certificado instalado? He tenido problemas en el pasado tratando de conectar puntos finales seguros en el servidor web de desarrollo.

Aquí está la configuración de enlace que me ha funcionado en el pasado. En lugar de basicHttpBinding, usa wsHttpBinding. No sé si eso es un problema para ti.

<!-- Binding settings for HTTPS endpoint -->
<binding name="WsSecured">
    <security mode="Transport">
        <transport clientCredentialType="None" />
        <message clientCredentialType="None"
            negotiateServiceCredential="false"
            establishSecurityContext="false" />
    </security>
</binding>

y el punto final

<endpoint address="..." binding="wsHttpBinding"
    bindingConfiguration="WsSecured" contract="IYourContract" />

Además, asegúrese de cambiar la configuración del cliente para habilitar la seguridad del transporte.


29
2018-03-12 20:55



Tuve el mismo problema EXACTO que el OP. Mi configuración y situación eran idénticas. Finalmente lo reduje a ser un problema en WCFStorm después de crear una referencia de servicio en un proyecto de prueba en Visual Studio y confirmar que el servicio estaba funcionando. En Storm, debe hacer clic en la opción de configuración "Config" (NO EN "Client Config"). Después de hacer clic en eso, haga clic en la pestaña "Seguridad" en el cuadro de diálogo que aparece. Asegúrese de que "Tipo de autenticación" esté configurado en "Ninguno" (El valor predeterminado es "Autenticación de Windows"). Presto, funciona! Siempre pruebo mis métodos en WCFStorm mientras los construyo, pero nunca he intentado usarlos para conectarlos a uno que ya se configuró en SSL. ¡Espero que esto ayude a alguien!


20
2018-06-10 03:10



Cambio de

<security mode="None">

a

<security mode="Transport">

en su archivo web.config. Este cambio le permitirá usar https en lugar de http


20
2017-07-21 15:43



Tuve la misma excepción en una custom binding guión. Cualquiera que use este enfoque, puede verificar esto también.

De hecho, estaba agregando la referencia de servicio de un local WSDL  archivo. Se agregó con éxito y se agregó el enlace personalizado al archivo de configuración. Sin embargo, el servicio real era https; no http Así que cambié el httpTransport elemet como httpsTransport. Esto solucionó el problema

<system.serviceModel>
<bindings>

  <customBinding>
    <binding name="MyBindingConfig">

      <textMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16"
        messageVersion="Soap11" writeEncoding="utf-8">
        <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
          maxBytesPerRead="4096" maxNameTableCharCount="16384" />
      </textMessageEncoding>

      <!--Manually changed httpTransport to httpsTransport-->
      <httpsTransport manualAddressing="false" maxBufferPoolSize="524288"
        maxReceivedMessageSize="65536" allowCookies="false" authenticationScheme="Anonymous"
        bypassProxyOnLocal="false" 
        decompressionEnabled="true" hostNameComparisonMode="StrongWildcard"
        keepAliveEnabled="true" maxBufferSize="65536" 
        proxyAuthenticationScheme="Anonymous"
        realm="" transferMode="Buffered" unsafeConnectionNtlmAuthentication="false"
        useDefaultWebProxy="true" />
    </binding>
  </customBinding>

</bindings>

<client>
  <endpoint address="https://mainservices-certint.mycompany.com/Services/HRTest"
    binding="customBinding" bindingConfiguration="MyBindingConfig"
    contract="HRTest.TestWebserviceManagerImpl" name="TestWebserviceManagerImpl" />
</client>


</system.serviceModel>

Referencias

  1. WCF con custombinding en http y https

15
2017-12-06 10:56



Encontré el mismo problema, así es como resultó mi solución al final:

        <basicHttpsBinding>
            <binding name="VerificationServicesPasswordBinding">
              <security mode="Transport">
              </security>
            </binding>
            <binding name="VerificationServicesPasswordBinding1" />
        </basicHttpsBinding>

Básicamente reemplacé cada aparición de Http con Https. Puede intentar agregar ambos si lo prefiere.


11
2018-06-26 12:36



Es bueno recordar que los archivos de configuración se pueden dividir en archivos secundarios para facilitar los cambios de configuración en diferentes servidores (dev / demo / producción, etc.), sin tener que volver a compilar código / aplicación, etc. Por ejemplo, los usamos para permitir que los ingenieros en el sitio realicen cambios en el punto final sin tocar realmente los archivos "reales".

El primer paso es mover la sección de enlaces fuera de WPF App.Config en su propio archivo separado.

La sección de comportamientos está configurada para permitir http y https (no parece tener un efecto en la aplicación si ambos están permitidos)

<serviceMetadata httpsGetEnabled="true" httpGetEnabled="true" />

Y movemos la sección de enlaces a su propio archivo;

 <bindings configSource="Bindings.config" /> 

En el archivo bindings.config, cambiamos la seguridad en función del protocolo

  <!-- None = http:// -->
  <!-- Transport = https:// -->
  <security mode="None" >

Ahora los ingenieros en el sitio solo necesitan cambiar el archivo Bindings.Config y Client.Config donde almacenamos la URL real para cada punto final.

De esta forma podemos cambiar el punto final de http a https y viceversa para probar la aplicación sin tener que cambiar ningún código.

Espero que esto ayude.


3
2018-06-23 12:05