Le schéma URI fourni "https" n'est pas valide; "http" est attendu. Nom du paramètre: via

j'essaie de faire un service WCF sur basicHttpBinding pour être utilisé sur https. Voici mon site 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>

je me connecte en utilisant WCFStorm qui est capable de récupérer toutes les métadonnées correctement, mais quand j'appelle la méthode actuelle je reçois:

le schéma URI fourni ' https 'est invalide;'http' attendu. Nom du paramètre: via

245
demandé sur Kjartan 2010-03-12 23:53:00

12 réponses

essayez d'ajouter des informations d'identification de message sur votre application.comme dans la configuration:

<bindings> 
<basicHttpBinding> 
<binding name="defaultBasicHttpBinding"> 
  <security mode="Transport"> 
    <transport clientCredentialType="None" proxyCredentialType="None" realm=""/> 
    <message clientCredentialType="Certificate" algorithmSuite="Default" />
  </security> 
</binding> 
</basicHttpBinding> 
</bindings> 
213
répondu Jojo Sardez 2015-12-11 15:10:42

ajoutant ceci comme réponse, juste parce que vous ne pouvez pas faire beaucoup de formatage de fantaisie dans les commentaires.

J'avais le même problème, sauf que je créais et reliais mon client de service web entièrement en code.

La raison est que la DLL était chargée dans un système qui interdisait l'utilisation de fichiers de configuration.

voici le code qu'il fallait mettre à jour pour communiquer par 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
43
répondu eidylon 2014-01-15 15:55:37

êtes-vous en train d'exécuter ceci sur Cassini (vs dev server) ou sur IIS avec un cert installé? J'ai eu des problèmes dans le passé en essayant de connecter des points finaux sécurisés sur le serveur web dev.

, Voici la configuration de liaison qui a fonctionné pour moi dans le passé. Au lieu de basicHttpBinding , il utilise wsHttpBinding . Je ne sais pas si c'est un problème pour vous.

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

et le point final

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

Aussi, assurez-vous que vous modifier la configuration du client pour activer la sécurité du Transport.

29
répondu pattersonc 2015-12-11 15:10:54

changement de

<security mode="None">

à

<security mode="Transport">

dans votre web.fichier de configuration. Cette modification vous permettra d'utiliser https au lieu de http

21
répondu Amir Md Amiruzzaman 2016-07-21 15:43:37

j'ai eu exactement le même problème que l'OP. Ma configuration et la situation était identique. J'ai finalement décidé que C'était un problème dans WCFStorm après avoir créé une référence de service dans un projet test dans Visual Studio et avoir confirmé que le service fonctionnait. Dans Storm, vous devez cliquer sur l'option" Config "settings (pas sur"Client Config"). Après avoir cliqué sur cela, cliquez sur l'onglet "Sécurité" dans la boîte de dialogue qui apparaît. Assurez-vous que "type D'authentification" est défini à "None" (Le la valeur par défaut est"Windows Authentication"). Hop, ça marche!!! Je teste toujours mes méthodes dans WCFStorm car je les construis, mais je n'ai jamais essayé de les utiliser pour me connecter à une qui a déjà été configurée sur SSL. Espérons que cela aide quelqu'un!

20
répondu Randy Staats 2011-06-10 03:10:17

j'ai eu la même exception dans un scénario custom binding . N'importe qui utilisant cette approche, peut vérifier cela aussi.

en fait, j'ajoutais la référence de service d'un fichier local WSDL . Il a été ajouté avec succès et a exigé la liaison personnalisée a été ajoutée au fichier de configuration. Cependant,le service réel était https; pas http. J'ai donc changé l'élément de transport httpTransport en httpsTransport . Cela a corrigé le problème

<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>

Références

  1. WCF avec custombinding sur http et https
15
répondu Lijo 2017-05-23 12:18:30

est tombé sur la même question, c'est ainsi que ma solution s'est avérée à la fin:

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

j'ai essentiellement remplacé chaque occurrence de Http par Https. Vous pouvez essayer d'ajouter les deux si vous préférez.

11
répondu Fat Shogun 2015-12-11 15:11:31

si vous faites cela programatically et non dans le web.configuration:

new WebHttpBinding(WebHttpSecurityMode.Transport)
4
répondu Terje Solem 2017-04-27 12:55:57

il est bon de se rappeler que les fichiers de configuration peuvent être divisés en plusieurs fichiers secondaires pour faciliter les changements de configuration sur différents serveurs (dev/demo/production, etc.), sans avoir à recompiler le code/l'application, etc. Par exemple, nous les utilisons pour permettre aux ingénieurs sur place d'apporter des modifications aux paramètres sans toucher aux "vrais" fichiers.

la première étape consiste à déplacer la section des reliures hors de L'application du FPF.Config dans son propre fichier.

les comportements section est défini pour permettre à la fois http et https (ne semble pas avoir d'effet sur l'application si les deux sont autorisés)

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

et nous déplaçons la section de reliures dans son propre fichier;

 <bindings configSource="Bindings.config" /> 

dans les reliures.nous basculons la sécurité sur la base du protocole

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

maintenant les ingénieurs sur le site ont seulement besoin de changer les fixations.Fichier de configuration et le Client.Config où nous stockons l'URL réelle pour chaque endpoint.

de cette façon, nous pouvons changer le point final de http à https et de nouveau pour tester l'application sans avoir à changer de code.

Espérons que cette aide.

3
répondu chillfire 2014-06-23 12:05:33

Pour re-cap, la question de l'OP:

je me connecte [à un service WCF] en utilisant WCFStorm qui est capable de récupérer toutes les métadonnées correctement, mais quand j'appelle la méthode actuelle je reçois:

le schéma URI fourni ' https 'est invalide;'http' attendu. Nom du paramètre: via

La WCFStorm tutoriels traite de cette question dans Travailler avec IIS et SSL .

leur solution a fonctionné pour moi:

  1. pour corriger l'erreur, générez une configuration client qui correspond à la configuration service de la wcf. La façon la plus facile de le faire est avec Visual Studio.

    • Open Visual Studio et ajouter une référence au service. VS générera une application.fichier de configuration correspondant au service

    • éditer l'application.fichier de configuration pour qu'il puisse être lu par WCFStorm. Veuillez consulter chargement de L'application Client.les fichiers de configuration . S'assurer que les attributs endpoint/@name et endpoint/@contract correspondent aux valeurs de wcfstorm.

  2. la Charge de la modification de l'app.config to WCFStorm [en utilisant le bouton Toobar Client Config].

  3. invoquez la méthode. Cette fois, l' l'invocation de méthode n'échouent plus

Élément (1) dernier point signifie en effet supprimer le préfixe d'espace de noms que VS ajoute le point de terminaison du contrat d'attribut, par défaut "ServiceReference1"

<endpoint ... contract="ServiceReference1.ListsService" ... />

dans l'application.config que vous chargez dans WCFStorm que vous voulez pour ListsService:

<endpoint ... contract="ListsService" ... />
2
répondu JohnC 2013-03-13 17:52:57

wsHttpBinding est un problème parce que silverlight n'est pas la supporter!

1
répondu Jason Henriksen 2010-12-07 19:45:59

j'avais besoin des fixations suivantes pour que la mienne fonctionne:

        <binding name="SI_PurchaseRequisition_ISBindingSSL">
          <security mode="Transport">
            <transport clientCredentialType="Basic" proxyCredentialType="None" realm="" />
          </security>
        </binding>
1
répondu Flea 2018-01-10 17:12:45