Sağlanan URI şeması 'https' geçersiz; beklenen 'http'. Parametre adı: üzerinden


281

Ben https üzerinde kullanılacak basicHttpBinding üzerinde bir WCF hizmeti yapmaya çalışıyorum. İşte benim 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>

Tüm meta verileri düzgün bir şekilde alabilen WCFStorm kullanarak bağlanıyorum, ancak gerçek yöntemi çağırdığımda olsun:

Sağlanan URI şeması 'https' geçersiz; beklenen 'http'. Parametre adı: üzerinden


4
Almancada hata mesajı " Das bereitgestellte URI-Schema" https "ist ungültig; erwartet wurde" http " yazıyor .
Uwe Keim

Yanıtlar:


240

App.config dosyasına aşağıdaki gibi mesaj kimlik bilgileri eklemeyi deneyin:

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

35
OP'ye bu yanıt için teşekkür ederiz; Aynı sorunu yaşıyordum ve <security> etiketinin modunu "Hiçbiri" varsayılanından "Aktarım" olarak değiştirdim.
Otis

1
Herhangi bir nedenle IIS6 tarafından reddedilen <message> bloğu dışında, bu iyi çalıştı.
Chris Chubb

4
aynı yapılandırmayı projeme kopyaladım ama bu hiçbir şey vermedi. Eklemek için bir şey kaçırdım mı?

1
Çok teşekkür ederim. Çevrimiçi olarak bulunan birkaç çözümü denedim, ancak hiçbiri işe yaramadı. Bu mükemmeldi.
aspnetdeveloper

59

Bunu yorum olarak çok süslü biçimlendirme yapamadığınız için yanıt olarak eklemek.
Web sorunu istemcimi tamamen kodda oluşturup bağladığım dışında aynı sorunu yaşadım.
Nedeni DLL, yapılandırma dosyalarının kullanımını yasaklayan bir sisteme yüklenmesidir.

İşte SSL üzerinden iletişim kurmak için güncellenmesi gereken kod ...

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

Web hizmetiniz için sınıfları nasıl oluşturdunuz?
kaiyaq

işe yarıyor! Aynı sorun benim C # vardı. Yapıştır kopyalayın ve sorun çözüldü.
user3417479

@kaiyaq - Hala tüm standart şeyler ile geliştirme için hizmet para cezası bağlanabilir, VS benim için sınıfları oluşturmak izin, daha sonra DLL derlenmiş olsun. Sadece çalışma zamanında Yapılandırma dosyasını tüm bağlantı bilgileriyle yükleyemiyorum.
eidylon

BasicHttpBinding System.ServiceModel; Gelecekteki FYI okuyucuları.
DLeh

38

Şundan değiştir

<security mode="None">

için

<security mode="Transport">

web.config dosyanızda. Bu değişiklik, http yerine https kullanmanıza izin verecektir


30

Bunu bir sertifika yüklü olan Cassini'de (vs dev sunucusu) veya IIS'de mi çalıştırıyorsunuz? Geçmişte dev web sunucusunda güvenli uç noktaları bağlamaya çalışırken sorunlar yaşadım.

İşte geçmişte benim için çalışan bağlayıcı yapılandırma. Bunun yerine basicHttpBindingkullanır wsHttpBinding. Bunun sizin için bir sorun olup olmadığını bilmiyorum.

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

ve bitiş noktası

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

Ayrıca, Aktarım güvenliğini etkinleştirmek için istemci yapılandırmasını değiştirdiğinizden emin olun.


1
kendinden imzalı sertifika yüklü yerel IIS 7
isg

13
"Ayrıca, Aktarım güvenliğini etkinleştirmek için istemci yapılandırmasını değiştirdiğinizden emin olun." -- İyi tavsiye. Çok kolay göz ardı edilir ve WCF hatalarında ipucu vermez.
Luke Puplett

Geçerli olmayan müzakereHizmetKurumsal ve
kuruluşGüvenlik Bağlam

20

Bir custom bindingsenaryoda da aynı istisnaydım . Bu yaklaşımı kullanan herkes bunu da kontrol edebilir.

Aslında bir local WSDL dosyadan servis referans ekliyordu . Başarıyla eklendi ve yapılandırma dosyasına gereken özel ciltleme eklendi. Ancak, gerçek hizmet https oldu; http değil. Bu yüzden httpTransport elemetini olarak değiştirdim httpsTransport. Bu sorunu çözdü

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

Referanslar

  1. Hem http hem de https üzerinde custombinding özellikli WCF

19

Ben OP ile aynı sorunu vardı. Konfigürasyonum ve durumum aynıydı. Sonunda Visual Studio'da bir test projesinde bir hizmet başvurusu oluşturduktan ve hizmetin çalıştığını onayladıktan sonra WCFStorm'da bir sorun olmaya daralttım. Storm'da "Config" ayarları seçeneğini tıklamanız gerekir ("Client Config" DEĞİL). Buna tıkladıktan sonra, açılan iletişim kutusundaki "Güvenlik" sekmesini tıklayın. "Kimlik Doğrulama Türü" nün "Yok" olarak ayarlandığından emin olun (Varsayılan "Windows Kimlik Doğrulaması" dır). Presto, işe yarıyor! WCFStorm'da yöntemlerimi her zaman oluşturduğum için test ediyorum, ancak SSL üzerinde kurulmuş olanlara bağlanmak için hiç kullanmadım. Umarım bu birine yardımcı olur!


Aynı sorunu yaşadım, ancak "Kullanıcı Adı / Şifre Doğrulaması" kullanarak yanlış şifre aldım. Parolanızı değiştirirseniz, hizmetin URL'sini ve alması için araç çubuğundaki "Yenile" düğmesini tıklamanız gerekir.
Ryan Shillington

12

Aynı sorunla karşılaştım, bu benim çözümümün sonunda ortaya çıktı:

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

Temel olarak her Http oluşumunu Https ile değiştirdim. İsterseniz her ikisini de eklemeyi deneyebilirsiniz.


5
BasicHttpsBinding'in 4.5 ve daha yeni olduğuna dikkat edilmelidir.
Jagd

7

Bunu web.config dosyasında değil programlı olarak yaparsanız:

new WebHttpBinding(WebHttpSecurityMode.Transport)

Harika. Her zaman .exe.config dosyalarından nefret ettim ve kod yerine her şeyi yaptım. Bu benim sorunumu çözdü.
nivs1978

4

Yapılandırma dosyalarının, kod / uygulama vb. 'gerçek' dosyalara dokunmadan uç nokta değişiklikleri yapın.

İlk adım, bağlamalar bölümünü WPF App.Config'den kendi ayrı dosyasına taşımaktır.

Davranışlar bölümü hem http hem de https'ye izin verecek şekilde ayarlandı (her ikisine de izin veriliyorsa uygulama üzerinde bir etkisi yok gibi görünüyor)

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

Bağlamalar bölümünü kendi dosyasına taşıyoruz;

 <bindings configSource="Bindings.config" /> 

Bindings.config dosyasında güvenliği protokole göre değiştiriyoruz

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

Artık site mühendislerinin Bindings.Config dosyasını ve her bir uç nokta için gerçek URL'yi depoladığımız Client.Config dosyasını değiştirmeleri yeterlidir.

Bu şekilde, herhangi bir kodu değiştirmek zorunda kalmadan uygulamayı test etmek için uç noktayı http'den https'ye değiştirebiliriz.

Bu yardımcı olur umarım.


2

OP'deki soruyu tekrar kapatmak için:

Tüm meta verileri düzgün bir şekilde alabilen WCFStorm kullanarak [bir WCF hizmetine] bağlanıyorum, ancak gerçek yöntemi çağırdığımda elde:

Sağlanan URI şeması 'https' geçersiz; beklenen 'http'. Parametre adı: üzerinden

WCFStorm eğiticileri IIS ve SSL ile çalışma bölümündeki bu sorunu giderir .

Onların çözümü benim için çalıştı:

  1. Hatayı gidermek için, wcf hizmeti yapılandırmasıyla eşleşen bir istemci yapılandırması oluşturun. Bunu yapmanın en kolay yolu Visual Studio'dur.

    • Visual Studio'yu açın ve hizmete bir hizmet başvurusu ekleyin. VS, hizmetle eşleşen bir app.config dosyası oluşturur

    • App.config dosyasını WCFStorm tarafından okunabilecek şekilde düzenleyin. Lütfen İstemci App.config dosyalarını yükleme konusuna bakın . Bitiş noktası / @ adı ve bitiş noktası / @ sözleşme özniteliklerinin wcfstorm'daki değerlerle eşleştiğinden emin olun.

  2. Değiştirilmiş app.config dosyasını [Client Config toobar düğmesini kullanarak] WCFStorm'a yükleyin.

  3. Yöntemi çağırın. Bu kez yöntem çağırma artık başarısız olmayacak

Yürürlükteki son madde (1) , VS'nin varsayılan olarak "ServiceReference1" adlı uç nokta sözleşme özelliğine eklediği ad alanı önekinin kaldırılması anlamına gelir

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

bu nedenle ListsService için istediğiniz WCFStorm'a yüklediğiniz app.config dosyasında:

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

2

Benimkinin çalışmasını sağlamak için aşağıdaki bağlara ihtiyacım vardı:

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.