Предоставленная схема 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)