Предоставленная схема URI "https" недействительна; ожидаемый "http". Имя параметра: через

Я пытаюсь сделать службу WCF над basicHttpBinding, которая будет использоваться по https. Здесь мой web.config:

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

...                                                

Я подключаюсь с помощью WCFStorm, который может правильно получить все метаданные, но когда я вызываю фактический метод, я получаю:

Приведенная схема URI "https" недействительна; ожидаемый "http". Имя параметра: через

Ответ 1

Попробуйте добавить учетные данные в свой app.config как:

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

Ответ 2

Добавление этого в качестве ответа, так как вы не можете делать много форматирования комментариев. У меня была такая же проблема, за исключением того, что я создавал и привязывал моего клиента веб-сервиса полностью к коду.
Причина в том, что DLL загружается в систему, что запрещает использование файлов конфигурации.

Вот код, который необходимо обновить для связи через 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 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

Ответ 3

Запускаете ли вы это на Cassini (vs dev server) или в IIS с установленным сертификатом? В прошлом у меня были проблемы с подключением защищенных конечных точек на веб-сервере dev.

Вот привязывающая конфигурация, которая работала для меня в прошлом. Вместо basicHttpBinding он использует wsHttpBinding. Я не знаю, если это проблема для вас.

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

и конечная точка

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

Кроме того, убедитесь, что вы изменили конфигурацию клиента, чтобы включить безопасность транспорта.

Ответ 4

У меня была ТОЧНАЯ проблема с OP. Моя конфигурация и ситуация были идентичны. Я, наконец, сузил его до проблемы в WCFStorm после создания ссылки на службу в тестовом проекте в Visual Studio и подтвердил, что служба работает. В Storm вам нужно нажать на опцию "Config" (НЕ "Конфигурация клиента" ). После этого нажмите вкладку "Безопасность" в появившемся диалоговом окне. Убедитесь, что для параметра "Тип аутентификации" установлено значение "Нет" (по умолчанию "Аутентификация Windows" ). Престо, это работает! Я всегда тестирую свои методы в WCFStorm, когда я их строю, но никогда не пытался использовать его для подключения к тому, который уже настроен на SSL. Надеюсь, это поможет кому-то!

Ответ 5

Изменить от

<security mode="None">

to

<security mode="Transport">

в файле web.config. Это изменение позволит вам использовать https вместо http

Ответ 6

У меня было такое же исключение в сценарии custom binding. Любой, кто использует этот подход, тоже может это проверить.

Я фактически добавлял ссылку на службу из файла local WSDL. Он был успешно добавлен, и в конфигурационный файл добавлена ​​обязательная привязка. Однако фактическое обслуживание было https; не http. Поэтому я изменил httpTransport elemet как httpsTransport. Это фиксировало проблему

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

Ссылки

Ответ 7

В том же выпуске, вот как мое решение получилось в конце:

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

Я в основном заменил все случаи Http на Https. Вы можете попробовать добавить их оба, если хотите.

Ответ 8

Хорошо помнить, что файлы конфигурации можно разделить на вторичные файлы, чтобы упростить изменения конфигурации на разных серверах (dev/demo/production и т.д.), без необходимости перекомпилировать код/​​приложение и т.д. Например, мы используем их, чтобы позволить инженерам на месте изменять конечные точки без фактического касания "реальных" файлов.

Первый шаг - переместить раздел привязок из WPF App.Config в отдельный файл.

Секция поведения настроена так, чтобы разрешать как http, так и https (кажется, не влияет на приложение, если оба разрешены)

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

И мы переместим раздел привязок в свой собственный файл;

 <bindings configSource="Bindings.config" /> 

В файле bindings.config мы переключаем безопасность на основе протокола

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

Теперь инженерам на месте необходимо изменить файл Bindings.Config и Client.Config, где мы храним фактический URL для каждой конечной точки.

Таким образом, мы можем изменить конечную точку с http на https и обратно, чтобы протестировать приложение, не изменяя никакого кода.

Надеюсь, что это поможет.

Ответ 9

Чтобы повторно закрыть вопрос в OP:

Я подключаю [к службе WCF] с помощью WCFStorm, который может правильно восстановить все метаданные, но когда я вызываю фактический метод, я получаю:

Приведенная схема URI "https" недействительна; ожидаемый "http". Имя параметра: через

Учебники WCFStorm решают эту проблему в Работа с IIS и SSL.

Их решение сработало для меня:

  • Чтобы исправить ошибку, создайте конфигурацию клиента, которая соответствует конфигурации службы wcf. Самый простой способ сделать это - с помощью Visual Studio.

    • Откройте Visual Studio и добавьте сервисную ссылку на службу. VS создаст файл app.config, соответствующий службе

    • Отредактируйте файл app.config, чтобы он мог быть прочитан WCFStorm. См. Загрузка файлов клиента App.config. Убедитесь, что атрибуты endpoint/@name и endpoint/@contract соответствуют значениям в wcfstorm.

  • Загрузите измененный файл app.config в WCFStorm [с помощью кнопки tobarar Client Config].

  • Вызвать метод. На этот раз вызов метода больше не будет терпеть неудачу

Элемент (1) последний действующий маркер означает удаление префикса пространства имен, который VS добавляет к атрибуту контракта конечной точки, по умолчанию "ServiceReference1"

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

поэтому в app.config, который вы загружаете в WCFStorm, который вы хотите для ListService:

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

Ответ 10

wsHttpBinding - проблема, потому что silverlight не поддерживает ее!

Ответ 11

Если вы делаете это программно, а не в web.config, его:

new WebHttpBinding(WebHttpSecurityMode.Transport)