TL; версия DR находится внизу.
Я создал три веб-сервиса WCF - один, использующий .NET 4, и два, использующие .NET 3.5, который используется клиентом Android.Клиент Android выполняет звонки, используя ksoap2-android.Когда службы были завершены, и клиент мог выполнять все вызовы и получать все данные из служб, мы решили активировать связь HTTPS для веб-служб.Они размещены на сервере под управлением IIS.
Я не одинок в этой задаче.Я работаю полный рабочий день с этим, главным образом клиентом Android.У меня есть два сотрудника, у каждого из которых много других обязанностей.Первый в основном связан с сервисами, а второй - с сервером.
В Интернете я прочитал множество руководств, блогов и статей о том, как включить HTTPS для веб-службы WCF,но все же я не смог полностью решить эту проблему.Чтобы клиент Android мог использовать клиент, мы ограничены использованием basicHttpBinding, поскольку wsHttpBinding содержит некоторые сведения о безопасности, которые не поддерживаются Android, или что-то еще.Я не уверен, но я читал это на каком-то форуме.Если я ошибаюсь, я с радостью поправлюсь!
Хорошо, поэтому я кратко расскажу о том, что я сделал до сих пор:
У меня включена транспортная безопасность , вот как выглядит привязка:
<bindings>
<basicHttpBinding>
<binding name="basicHttp" closeTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00">
<security mode="Transport">
<transport clientCredentialType="None" />
</security>
</binding>
</basicHttpBinding>
</bindings>
У меня включена публикация метаданных по HTTPS с использованием этой строкис кодом:
<serviceMetadata httpsGetEnabled="true" />
и это:
<endpoint address="" binding="mexHttpsBinding" contract="IMetadataExchange" />
Кроме того, у моего второго коллеги установлен доверенный сертификат (настоящий сертификат от CA) наСервер IIS и добавили привязку https на сервере.
Хорошо, пока все хорошо.Теперь мы можем подключаться к службам в браузере.
Когда мы это сделали, можно было посещать службу в браузере безопасным, зашифрованным способом.
Проблема в том, чтоневозможно позвонить в службу, ни в Android, ни в WCF Test Client.Если я позвоню в службу по адресу https, я получу 404 в ответ.Тестовый клиент WCF возвращает следующее:
There was no endpoint listening at https://[my service address] that could accept the message. This is often caused by an incorrect address or SOAP action.
Чтобы отладить это, я использую Wireshark, чтобы перехватить сообщения и посмотреть, что на самом деле происходит.Я обнаружил, что после установленных процедур (рукопожатие, установление доверия и т. Д.) Клиент отправляет заголовок и получает 101 Continue в ответ, после чего он отправляет тело.Это должно быть нормальным поведением.Но затем сервис возвращает 404 Not Found.Wireshark говорит, что полный URI запроса - это http-адрес.Я настроил сервер на использование адреса https, так почему он звонит по адресу http?
Я попытался установить для атрибута address и listenUri конечной точки значения https и http соответственно, а такженаоборотЕсли я это сделаю, сервер ответит на запрос методом 405. Не разрешено.
Есть ли способ решить эту проблему?Чего мне не хватает?
Чего мне не хватает?
TL; версия DR ниже
Я размещаю три веб-службы WCF SOAP с IISодин использует .NET 4, а другие - .NET 3.5.Я пытаюсь позвонить с тестового клиента WCF через HTTPS.Я включил безопасность транспорта, публикацию метаданных через HTTPS, установил доверенный сертификат и добавил привязку https на сервер.
Когда я пытаюсь сделать вызов из тестового клиента WCF, он говорит, что не было конечной точкислушаю по адресу.Wireshark сообщает мне, что он вызывает http-версию службы (т. Е. «http://[my address]» вместо «https://[my address]»), хотя он настроен для вызова https-адреса.Служба возвращает 404 Not Found.Если я установлю адрес службы на https и listenUri на http, я получу метод 405 Not Allowed.Если я делаю это наоборот, он говорит, что его нельзя активировать.Чего мне не хватает?