Размещение библиотеки WCFService на IIS 10 с шифрованием SSL - PullRequest
1 голос
/ 01 апреля 2019

Я пытаюсь разместить библиотеку служб WCF на IIS 10 с самозаверяющим SSL.

Чтобы получить минимально полный проверяемый пример, Open Visual studio 2017

New> Project> C #> Web> WCFLibrary При этом вы получите простой код с одним контрактом операции, который принимает целое число и возвращает строку.

Теперь я пытаюсь разместить его на IIS с самоподписанным SSL (у меня больше контракт на эксплуатацию, но это будет сделано).

То, что я пробовал до сих пор.

Теперь следующая часть размещает его на IIS, поэтому я создал файл SVC

Мой SVC-файл содержит ->

<%@ ServiceHost Language = "C#" Debug = "true" Service = "WcfServiceLibrary2.Service1" %>

Затем все учебники, которые я могу найти, редактируют Web.Config, который недоступен в Visual Studio 2017, поэтому я попробовал две вещи 1. Создал файл Web.Config и добавил настройки 2. Опубликовал сайт, а затем получил Web.Config, который не требовал никаких изменений

Затем я перешел в IIS (как администратор) и добавил новый веб-сайт

.

Затем при попытке просмотреть сообщение о том, что служба IIS размещена, я получил эту ошибку «Не удается прочитать файл конфигурации». Чтобы решить эту проблему, я следовал за success.trendmicro.com/…

Теперь эта ошибка исчезла, но теперь я получаю

Forbidden Error

Для решения этой проблемы я подписался IIS - 401.3 - Несанкционировано Но это привело к тому, что браузер позволил мне просматривать каталоги, а не выдавать сообщение о создании службы.

Есть идеи, что мне здесь не хватает?

Определенно, я упускаю что-то важное здесь, так как мне не удалось разместить его на самом HTTP. Все учебники, которые я нахожу в Интернете, имеют файл Web.Config, а не App.config, я ищу пример (желательно с изображениями) которые демонстрируют это только на этом небольшом примере.

Я знаю, что это не соответствует всем рекомендациям SO при задании вопросов, но я не смог сформулировать это в вопросе, который отвечает.

Редактировать

Согласно совету LexLi о том, что он уже может быть размещен, я пошел и попытался использовать его, используя svcutil, который выдал мне ошибку

WS-Metadata Exchange Error
    URI: http://localhost/Service1.svc

    Metadata contains a reference that cannot be resolved: 'http://localhost/Service1.svc'.

    The remote server returned an unexpected response: (405) Method Not Allowed.

    The remote server returned an error: (405) Method Not Allowed.


HTTP GET Error
    URI: http://localhost/Service1.svc

    There was an error downloading 'http://localhost/Service1.svc'.

    The request failed with HTTP status 404: Not Found.

URL-адрес правильный, потому что я получил его с помощью функции просмотра из IIS.

Ответы [ 3 ]

1 голос
/ 02 апреля 2019

Во-первых, не устанавливайте физический путь IIS к рабочему столу, что приведет к проблеме с разрешениями.мы могли бы установить физический путь сайта IIS к папке в разделе C.
Во-вторых, пожалуйста, прочитайте следующую ссылку, которая в основном указывает на то, что проект библиотеки служб WCF не может быть опубликован непосредственно в IIS, поскольку его Appconfig не может быть распознан IIS, если толькодополнительный Webconfig добавляется вручную в корневой каталог веб-сайта.
https://docs.microsoft.com/en-us/dotnet/framework/wcf/deploying-a-wcf-library-project
Вообще говоря, мы используем шаблон проекта службы WCF, который содержит автоматически сгенерированный файл Webconfig вместо шаблона проекта библиотеки служб WCF, посколькуобычно он используется в качестве библиотеки классов.
enter image description here
По умолчанию служба размещается с BasicHttpBinding, это зависит от следующего тега.

<protocolMapping>
        <add binding="basicHttpBinding" scheme="http" />
</protocolMapping>

Служба также может быть настроена вручную следующими способами.Эти два способа конфигурации файла эквивалентны.

<system.serviceModel>
    <services>
      <service name="WcfService1.Service1" behaviorConfiguration="mybehavior">
        <endpoint address="" binding="basicHttpBinding" contract="WcfService1.IService1" bindingConfiguration="mybinding"></endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"></endpoint>
      </service>
    </services>
    <bindings>
      <basicHttpBinding>
        <binding name="mybinding">
          <security mode="None">
          </security>
        </binding>
      </basicHttpBinding>
</bindings>

Нет необходимости назначать конечный адрес службы в webconfig.Это должно быть завершено в модуле привязки сайта IIS.
WCF System.ServiceModel.EndpointNotFoundException
Наконец, мы можем разместить службу через https, добавив дополнительную конечную точку службы, см. Следующуюконфигурация (упрощенная конфигурация).

<protocolMapping>
  <add binding="basicHttpBinding" scheme="http"/>
    <add binding="basicHttpsBinding" scheme="https" />
</protocolMapping>

, затем добавьте протокол https в модуль привязки сайта IIS.
Настройка Web.config для публикации службы WCF
https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/how-to-configure-an-iis-hosted-wcf-service-with-ssl
Не стесняйтесь, дайте мне знать, если есть что-то, с чем я могу помочь.

0 голосов
/ 04 апреля 2019

Первый кредит, при котором требуется кредит, многие из проблем, на которые я указал в правильном направлении несколькими пользователями SO, можно назвать следующие: Микаэль Болиндер , Авраам Цянь , Лекс Ли , замечательные люди в C # чате и мой коллега (У меня нет учетной записи на SO на момент написания этого ответа), В этом ответе я планируем охватить все, что вам может понадобиться для размещения библиотеки WCF в IIS Server с использованием безопасности HTTPS.

Инструменты, которые я использовал:

  • Visual Studio 2017, профессиональный
  • IIS 10 (поставляется с Windows 10, но должен быть активирован в функциях Windows) (см. Ниже)

Во-первых: Убедитесь, что у вас установлены все необходимые компоненты Visual Studio.

  1. Windows -> .Net Desktop Development
  2. Windows -> Универсальная платформа Windows для разработки
  3. Web & Cloud -> ASP.NET и веб-разработка

В этот и другие списки, которые будут добавлены, могут быть включены некоторые дополнительные компоненты, причина в том, что я установил их и не смог проверить, так или иначе, если они абсолютно необходимы.

Теперь давайте добавим необходимые функции Windows. Панель управления -> Программы -> Включение или отключение функций Windows

Windows Features necessary

Обязательно зайдите в Службы WCF и проверьте Активацию HTTP, не обманывайте себя квадратным блоком (Одна из моих ошибок)

Теперь давайте приступим к созданию Сервиса. Откройте Visual Studio Файл -> Создать -> Проект -> Visual C # -> Веб -> WCF -> Библиотека служб WCF . При этом создается MCVE, который вы пытаетесь разместить

Теперь вам нужно связать его с веб-сайтом, чтобы сгенерировать файл Web.Config вместе с файлом SVC, для этого в обозревателе решений щелкните правой кнопкой мыши свое решение, Добавить-> Новый веб-сайт .

Теперь в файле web.config добавьте

<system.serviceModel>
    <services>
      <service name="WcfServiceLibrary4.Service1"> <!-- Change the library name as per your need -->
        <endpoint address=""
                  binding="wsHttpBinding"
                  bindingConfiguration="secureHttpBinding"
                  contract="WcfServiceLibrary4.IService1"/> <!-- Change the library name as per your need -->

        <endpoint address="mex"
                  binding="mexHttpsBinding"
                  contract="IMetadataExchange" />
      </service>
    </services>
    <bindings>
      <basicHttpBinding>
        <binding name="secureHttpBinding">
          <security mode="Transport">
            <transport clientCredentialType="None"/>
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
          <serviceMetadata httpsGetEnabled="true"/>
          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

Далее добавьте ссылку на сервис на сайте

Adding Reference

Откройте сервисы и добавьте сервис, который вы создали. Теперь создайте свое решение и опубликуйте его. ** Осторожно Не публикуйте решение в пользовательском каталоге, таком как рабочий стол или документы, иначе права доступа ACL вызовут головную боль, а скорее опубликуйте его непосредственно в каталоге на диске.

Сейчас время хостинга Сначала давайте откроем IIS (Всегда как администратор) и создадим новый сертификат.

На сервере перейдите к части IIS и выберите «Сертификаты сервера», затем нажмите «Создать новый сертификат» справа.

Create Certificate

Теперь создайте новый сайт из левого меню

Create website

Choose website options

Обязательно переключитесь на https и выберите здесь свой сертификат. Теперь, чтобы убедиться, что ваша служба создана, вам нужно будет просмотреть созданный файл SVC для веб-сайтов. К сожалению, в этот момент вы получите сообщение об ошибке Server Error in '/' Application. Could not find a base address that matches scheme http for the endpoint with binding BasicHttpBinding. Registered base address schemes are [https]. Я не смог чтобы найти причину ошибки, но я смог найти ее,

Действия по обходу этой ошибки -> Выберите свой веб-сайт в меню слева, в меню привязок правой кнопки мыши, а также добавьте привязку HTTP с другим портом. После этого вы сможете просмотреть HTTPS-версию вашего файла SVC.

Adding Binding

Теперь, если вы перейдете по ссылке HTTPS, вы получите сообщение о создании службы

Service created

Теперь вы можете пойти дальше и создать приложение, которое использует этот сервис.

Что ждет впереди

  1. Я попытаюсь найти способ сделать это без добавления дополнительной привязки
  2. Второй целью было бы добиться этого без добавления дополнительного веб-сайта.

Если и когда я достигну этого, я буду обновлять, однако это не мой приоритет сейчас и может не добавляться в течение долгого времени, если что-то не имеет смысла, или у вас есть какие-либо идеи по улучшению комментария ниже.

0 голосов
/ 01 апреля 2019

Короче, вот шаги:

  1. Создание самоподписанного сертификата
  2. Добавить привязку SSL
  3. Настройка виртуального каталога для SSL
  4. Настройка службы WCF для безопасности транспорта HTTP

Эта ссылка более вглубина: https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/how-to-configure-an-iis-hosted-wcf-service-with-ssl

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