вызов веб-службы с использованием WCF через Http и Https - PullRequest
12 голосов
/ 04 июня 2009

В нашем проекте у нас есть веб-сервис java, который работает через http и https. Мы хотим использовать http для внутреннего использования и https для внешней версии нашего веб-приложения.

Итак, мы создали прокси-класс в нашем приложении и настроили привязку для http в web / app.config, и все работает нормально.

Какие изменения нам нужно внести в код и конфигурацию для поддержки https для той же службы в нашем внешнем приложении? Если возможно, пожалуйста, предоставьте фрагменты кода для объяснения!

Ответы [ 4 ]

22 голосов
/ 01 января 2010

Я нашел ответ, копаясь в MSDN.

В моем случае я использовал пользовательскую привязку:

<customBinding>
    <binding name="jsonpBinding">
        <jsonpMessageEncoding/>
        <httpTransport manualAddressing="true"/>
    </binding>
</customBinding>

На который ссылались в сервисе

<services>
    <service name="{YourInfoHere}">
        <endpoint address="" binding="customBinding" bindingConfiguration="jsonpBinding" behaviorConfiguration="{YourInfoHere}" contract="{YourInfoHere}"/>
    </service>
</services>

Добавление второй привязки, которая использовала httpsTransport, а затем второй сервис, который использовал эту привязку, добился цели. Окончательный вывод:

    <services>
        <service name="{YourInfoHere}">
            <endpoint address="" binding="customBinding" bindingConfiguration="jsonpBinding" behaviorConfiguration="{YourInfoHere}" contract="{YourInfoHere}"/>
            <endpoint address="" binding="customBinding" bindingConfiguration="jsonpBindingHttps" behaviorConfiguration="{YourInfoHere}" contract="{YourInfoHere}"/>
        </service>
    </services>
    <bindings>
        <customBinding>
            <binding name="jsonpBinding">
                <jsonpMessageEncoding/>
                <httpTransport manualAddressing="true"/>
            </binding>
            <binding name="jsonpBindingHttps">
                <jsonpMessageEncoding/>
                <httpsTransport manualAddressing="true" />
            </binding>
        </customBinding>
    </bindings>

Может быть не идеальным, но это работает. Это были единственные изменения, которые я сделал, чтобы заставить SSL работать. Поскольку все это находится в привязке и транспорте, код остается тем же.

Соответствующие ссылки MSDN:

  1. Пользовательская привязка: http://msdn.microsoft.com/en-us/library/ms731377.aspx
  2. HttpTransport: http://msdn.microsoft.com/en-us/library/system.servicemodel.channels.httptransportbindingelement.aspx
  3. HttpsTransport: http://msdn.microsoft.com/en-us/library/system.servicemodel.channels.httpstransportbindingelement.aspx
2 голосов
/ 24 сентября 2009

Я предполагаю, что вы используете basichttpbinding. Тогда вам нужно сделать две вещи:

  • изменить адрес на https:)
  • установить режим безопасности для транспорта
0 голосов
/ 04 июня 2009

Я понимаю, что вы используете WCF для создания клиента, который подключается к удаленному веб-сервису через HTTPS.

Для этого просто измените файл конфигурации на стороне клиента для приложения с поддержкой WCF, заменив http://server.address на https://server.address, в configuration/system.serviceModel/client/endpoint/@address. вот так:

<configuration>
  <system.serviceModel>
    ...
    <client>
        <!-- change only the address string -->
        <endpoint address="https://server.name/Whatever"
            everything.else.stays.the.same />

    </client>
  </system.serviceModel>
</configuration>

(Путь к файлу конфигурации зависит от обычных правил .NET: будь то приложение ASPNET, или служба, и т. Д.)

ИЛИ вы можете установить адрес явно в коде:

    // instantiate new proxy to web service
    var svc= new ServiceClient();
    var e = svc.Endpoint;
    e.Address = new System.ServiceModel.EndpointAddress("https://server.address/JavaServiceUri");

Я настоятельно советую вам сделать адрес настраиваемым, а не жестко его кодировать. Это не означает, что он должен храниться в app.config, но он должен быть изменяемым. Прокси тоже.

0 голосов
/ 04 июня 2009

См. Настройка HTTP и HTTPS :

Использование Windows Communication Foundation (WCF) через HTTP либо требует использование хоста, такого как Интернет Информационные службы (IIS) или руководство настройка параметров HTTP через HTTP-сервер API. это документ описывает вручную настройка WCF при использовании HTTP и HTTPS.

А также см. Связывания WCF, необходимые для HTTPS :

Я только что закончил писать свой первый производственное приложение WCF, которое работал очень хорошо, пока я не развернул его к нашей производственной среде. Все внезапно ни один из вызовов WCF не работать, и я бы получил JavaScript Ошибка «TestService не определена». Когда я смотрю внутрь службы JS ссылка (в режиме отладки), я получил следующая ошибка:

Не удалось найти базовый адрес, который соответствует схеме http для конечной точки с привязкой WebHttpBinding. Схемы зарегистрированных базовых адресов [HTTPS]

Так что, видимо, мой сервис WCF зарегистрировался как HTTPS (так как по SSL), но моя привязка была только настроен для HTTP. Решение определить пользовательскую привязку внутри вашего Файл Web.Config и установите безопасность Режим «Транспорт». Тогда ты просто нужно использовать обязательную конфигурацию собственность внутри вашей конечной точки определение, чтобы указать на ваш обычай связывание. Весь HTTPS-включен Раздел system.serviceModel находится ниже:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...