it-swarm.com.de

Das angegebene URI-Schema "https" ist ungültig. erwartet 'http'. Parametername: über

Ich versuche, einen WCF-Dienst über basicHttpBinding für die Verwendung über https zu erstellen. Hier ist meine 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>

Ich verbinde über WCFStorm, das alle Metadaten ordnungsgemäß abrufen kann. Wenn ich jedoch die eigentliche Methode aufrufe, erhalte ich Folgendes:

Das angegebene URI-Schema "https" ist ungültig. erwartet 'http'. Parametername: über

265
isg

Versuchen Sie, in Ihrer app.config Anmeldeinformationen für Nachrichten wie folgt hinzuzufügen:

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

Fügen Sie dies als Antwort hinzu, nur weil Sie nicht viel Lust auf Formatierung in Kommentaren haben.
Ich hatte das gleiche Problem, außer dass ich meinen Webdienst-Client vollständig in Code erstellt und gebunden habe.
Grund ist das DLL wurde in ein System hochgeladen, was die Verwendung von Konfigurationsdateien untersagte.

Hier ist der Code, der aktualisiert werden musste, um über SSL zu kommunizieren ...

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

Laufen Sie dies auf dem Cassini-Server (vs dev-Server) oder auf IIS mit einem installierten Zertifikat? Ich hatte in der Vergangenheit Probleme beim Versuch, sichere Endpunkte auf dem dev-Webserver zu verbinden.

Hier ist die verbindliche Konfiguration, die in der Vergangenheit für mich funktioniert hat. Anstelle von basicHttpBinding wird wsHttpBinding verwendet. Ich weiß nicht, ob das ein Problem für dich ist.

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

und der Endpunkt

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

Stellen Sie außerdem sicher, dass Sie die Clientkonfiguration ändern, um die Transportsicherheit zu aktivieren.

30
pattersonc

Wechsel von

<security mode="None">

zu

<security mode="Transport">

in Ihrer web.config-Datei. Mit dieser Änderung können Sie https anstelle von http verwenden

29

Ich hatte das GENAUE gleiche Problem wie das OP. Meine Konfiguration und Situation waren identisch. Ich habe es schließlich auf ein Problem in WCFStorm eingegrenzt, nachdem ich in einem Testprojekt in Visual Studio eine Dienstreferenz erstellt und bestätigt habe, dass der Dienst funktioniert hat. In Storm müssen Sie auf die Einstellungsoption "Config" klicken (NICHT "Client Config"). Nachdem Sie darauf geklickt haben, klicken Sie im daraufhin angezeigten Dialogfeld auf die Registerkarte "Sicherheit". Stellen Sie sicher, dass "Authentifizierungstyp" auf "Keine" eingestellt ist (Standardeinstellung ist "Windows-Authentifizierung"). Presto, es funktioniert! Ich teste meine Methoden immer in WCFStorm, während ich sie ausbaue, habe jedoch nie versucht, eine Verbindung mit einer Methode herzustellen, die bereits für SSL eingerichtet wurde. Hoffe das hilft jemandem!

20
Randy Staats

Ich hatte die gleiche Ausnahme in einem custom binding Szenario. Jeder, der diesen Ansatz verwendet, kann dies auch überprüfen.

Ich habe tatsächlich die Servicereferenz aus einem local WSDL Datei. Es wurde erfolgreich hinzugefügt und die erforderliche benutzerdefinierte Bindung wurde zur Konfigurationsdatei hinzugefügt. Der eigentliche Dienst war jedoch https. nicht http. Also habe ich das httpTransport-Element als httpsTransport geändert. Dies hat das Problem behoben

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

Verweise

  1. WCF mit benutzerdefinierten Bindungen auf http und https
18
Lijo

Stieß auf das gleiche Problem, so stellte sich meine Lösung am Ende heraus:

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

Ich habe im Grunde jedes Vorkommen von HTTP durch HTTP ersetzt. Sie können versuchen, beide hinzuzufügen, wenn Sie möchten.

11
Fat Shogun

Wenn Sie dies programmgesteuert und nicht in der Datei web.config ausführen, geschieht Folgendes:

new WebHttpBinding(WebHttpSecurityMode.Transport)
6
Terje Solem

Denken Sie daran, dass Konfigurationsdateien auf mehrere sekundäre Dateien aufgeteilt werden können, um Konfigurationsänderungen auf verschiedenen Servern (dev/demo/production usw.) zu vereinfachen, ohne Code/App usw. neu kompilieren zu müssen Nehmen Sie Änderungen am Endpunkt vor, ohne die „echten“ Dateien zu berühren.

Der erste Schritt besteht darin, den Bindungsabschnitt aus der WPF-App.Config in eine eigene separate Datei zu verschieben.

Der Bereich "Verhalten" ist so eingestellt, dass sowohl http als auch https zulässig sind (wirkt sich anscheinend nicht auf die App aus, wenn beide zulässig sind).

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

Und wir verschieben den Bindungsabschnitt in eine eigene Datei.

 <bindings configSource="Bindings.config" /> 

In der bindings.config Datei wechseln wir die Sicherheit basierend auf dem Protokoll

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

Jetzt müssen die Techniker vor Ort nur noch die Datei Bindings.Config und die Datei Client.Config ändern, in der die tatsächliche URL für jeden Endpunkt gespeichert ist.

Auf diese Weise können wir den Endpunkt von http auf https und wieder zurück ändern, um die App zu testen, ohne Code ändern zu müssen.

Hoffe das hilft.

3
chillfire

Um die Frage im OP wieder zu verschließen:

Ich verbinde [mit einem WCF-Dienst] über WCFStorm, das alle Metadaten ordnungsgemäß abrufen kann. Wenn ich jedoch die eigentliche Methode aufrufe, erhalte ich Folgendes:

Das angegebene URI-Schema "https" ist ungültig. erwartet 'http'. Parametername: über

In den WCFStorm-Lernprogrammen wird dieses Problem in Arbeiten mit IIS und SSL behandelt.

Ihre Lösung funktionierte für mich:

  1. Generieren Sie zur Behebung des Fehlers eine Clientkonfiguration, die der Konfiguration des Wcf-Dienstes entspricht. Am einfachsten geht das mit Visual Studio.

    • Öffnen Sie Visual Studio und fügen Sie dem Dienst einen Dienstverweis hinzu. VS generiert eine app.config-Datei, die dem Dienst entspricht

    • Bearbeiten Sie die Datei app.config, damit sie von WCFStorm gelesen werden kann. Siehe Laden der Client App.config-Dateien . Stellen Sie sicher, dass die Attribute endpoint/@ name und endpoint/@ contract mit den Werten in wcfstorm übereinstimmen.

  2. Laden Sie die geänderte app.config in WCFStorm [über die Schaltfläche Client Config toobar].

  3. Rufen Sie die Methode auf. Diesmal schlägt der Methodenaufruf nicht mehr fehl

Punkt (1) Der letzte Aufzählungspunkt bedeutet: Entfernen des Namespace-Präfix, dass VS standardmäßig "ServiceReference1" vor dem Endpoint-Vertragsattribut steht.

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

also in der app.config, die Sie in WCFStorm für ListsService laden möchten:

<endpoint ... contract="ListsService" ... />
2
JohnC

Ich brauchte die folgenden Bindungen, um meine zum Laufen zu bringen:

        <binding name="SI_PurchaseRequisition_ISBindingSSL">
          <security mode="Transport">
            <transport clientCredentialType="Basic" proxyCredentialType="None" realm="" />
          </security>
        </binding>
2
Flea

wsHttpBinding ist ein Problem, da Silverlight es nicht unterstützt!

1
Jason Henriksen