Активация windows communication foundation по http что это
Чтобы определить установленную на компьютере версию операционной системы Microsoft Windows, анализатор сервера Microsoft Exchange Server считывает следующую запись реестра:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\CurrentVersion
Ниже приведены значения и соответствующие им версии.
Microsoft Windows NT® Server 4.0
Microsoft Windows 2000 Server
Microsoft Windows Server™ 2003
Microsoft Windows Server 2008
-
Exchange Server 2010 установлен на компьютере с операционной системой Windows Server 2008.
Симптомы
Рассмотрим следующий сценарий.
Нужно дополнить наш web.config
Добавляем в любую точку раздела <configuration>, если отсутствует раздел webServer или дополняем уже существующий.
Находим раздел <system.web> и в нем вставляем следующее.
Далее нужно указать разделы биндинг и сервис
Раздел <serviceBehavior><behavior> дополняем такой вот строчкой. В ней мы говорим, что именно такая схема аутентификации будет использоваться у нас.
На этом настройка web.config заканчивается. В итоге у нас должен получиться файл примерно следующего содержания.
Создание службы WCF
Для начала необходимо создать новый проект WCF. Пусть наша Windows Communication Foundation служба будет возвращать количество оставшихся дней до нового года.
Visual studio создаст интерфейс и класс службы по умолчанию с именем IService1.cs и Service1.svc.
Нам необходимо переименовать их в соответствии с нашей предметной областью.
Давайте рассмотрим интерфейс INewYearService. Для начала нам необходимо в теле интерфейса объявить метод, который будет предоставлять служба для вызова. Для этого его необходимо пометить атрибутом [OperationContract].
Как вы видите данный метод возвращает экземпляр класса TimeToNewYear. Это вспомогательный класс, содержащий значения времени до нового года. Ниже приведена его структура. Для того, чтобы данный класс можно было использовать в качестве возвращаемого аргумента, его необходимо пометить атрибутом [DataContract], а свойства, доступные для чтения клиенту в возвращаемом значении помечаются атрибутом [DataMember].
Теперь нам остается реализовать интерфейс Windows Communication Foundation службы в классе NewYearService.svc.cs следующим образом:
Давайте проверим работу нашей службы wcf. Для этого нажмем кнопку Начать отладку. Обратите внимание, что возможные два варианта поведения системы. Если мы начнем отладку находясь в NewYearService.svc, от откроется отладчик службы. Во всех остальных случаях откроется окно браузера. Давайте рассмотрим каждый из вариантов подробнее.
Браузер
После запуска отладки отобразится браузер с файловой структурой нашей службы wcf.
Тестовый клиент WCF
В левой верхней части отладчика можно увидеть структура нашей службы wcf. Для проверки нашего метода выполним двойной щелчок левой кнопкой мыши по его имени. В правой части отладчика откроется форма запроса. Мы можем указать значение, которое будет передано в метод.
После этого в нижней правой части отладчика будет отображены значения возвращаемые нашей службой wcf.
Обходной путь
Чтобы решить проблему, используйте один из следующих методов.
Способ 1
Вручную измените корневой файл Web.config. Для этого выполните указанные ниже действия.
Откройте следующий файл в текстовом редакторе, например Блокнот администратора:
Добавьте следующий раздел конфигурации перед </configuration> тегом.
Тег </configuration> расположен в нижней части файла.
Добавьте в файл следующие разделы конфигурации, если они еще не существуют:
После сэкономленного файла выполните те же действия, чтобы изменить следующий файл, а затем перезапустить компьютер.
Способ 2
Запустите SmconfigInstaller.exe, чтобы обновитьWeb.config файл.
Чтобы выполнить SMConfigInstaller.exe на компьютере с 32-битной операционной системой, выполните следующие действия:
В командной подсказке введите следующую команду и нажмите кнопку Ввод:
Чтобы выполнить SMConfigInstaller.exe на компьютере с 64-битной операционной системой, выполните следующие действия:
В 64-битной командной подсказке введите следующую команду и нажмите кнопку Ввод:
В 32-битной командной подсказке введите следующую команду и нажмите кнопку Ввод:
Симптомы
Рассмотрим следующий сценарий.
Давайте рассмотрим процесс создания и вызова службы WCF.
Настройка applicationhost.config
Находим вот такой раздел. Все Deny меняем на Allow, разрешая изменение установленного по умолчанию режима аутентификации.
Далее находим данную настройку. В ней false меняем на true, разрешая механизму работать.
И под конец находим вот эту настройку. Тут мы true меняем на false. Говоря нашему IISExpres, чтобы он не блокировал службу windows-аутентификации.
После этого сохраняем все конфигурационные файлы и пробуем сделать ссылку на службу wcf аналогично как при добавлении службы в консольное приложение.
Изменим контроллер главной страницы web-приложения, чтобы взывать нашу службу wcf.
Теперь нам осталось только изменить представление, чтобы вывести результат работы Windows Communication Foundation службы на экран пользователя.
Получаем следующий результат работы веб-приложения.
Консольный клиент для WCF
Теперь нам необходимо создать клиент, который будет обращаться к нашей службе wcf. Для этого для начала создадим новое консольное приложение.
В созданном консольном приложении нам необходимо добавить ссылку на службу wcf.
В открывшимся окне службы необходимо указать имя службы wcf и ввести ее адрес.
Для простоты можно нажать кнопку Найти, тогда адрес службы wcf будет определен автоматически.
После этого необходимо развернуть дерево Windows Communication Foundation службы, чтобы удостоверится что выбран правильность выбора. В правой части должен быть отображен вызываемый метод.
Если настройка прошла корректно, то в обозревателе решения в консольном приложении отобразится ссылка на нашу службу wcf.
Теперь нам остается только обратиться к нашей службе, чтобы взывать метод и вывести результат на экран.
Перед началом отладки не забудьте установить консольное приложение автозагружаемым проектом. Получаем следующий результат.
Web клиент для WCF
Теперь рассмотрим, как нам обратиться к службе wcf из веб-приложения. Процесс подключения службы не отличается от подключения в консольном приложении. Давайте рассмотрим как можно настроить авторизацию с помощью Windows. Это потребует дополнительной настройки приложения. Для начала создадим проект нового MVC приложения.
Нажимаем кнопку ОК, и попадаем в меню настройки создания веб-приложения. Выберем MVC шаблон и изменим способ авторизации. Для этого нажмем на кнопку Изменить способ проверки подлинности.
Выбираем авторизацию с помощью Windows и нажимаем ОК в обоих окнах.
Теперь необходимо будет подождать кое-то время, чтобы создался проект и все библиотеки были загружены и подключены.
Для того, чтобы IISExpres перестала ругаться на нас за попытку создания windows-аутентификации нужно сделать ряд действий в наше службе.
Пример создания WCF-сервиса, работающего внутри службы Windows
Windows Communication Foundation – программная платформа от Microsoft для создания, настройки и развертывания распределенных сетевых сервисов. WCF-runtime и его пространство имен System.ServiceModel, представляющее его главный программный интерфейс, это преемник технологий создания распределенных систем, успешно применяемых разработчиками для создания распределенных приложений на платформе Windows в последнее десятилетие. Разберём тестовый пример создания WCF-сервиса.
Открываем Visual Studio 2015 и создаём новый проект типа Class Library. Проект назовём WCFMyServiceLibrary.
Файл Class1.cs переименуем в MyService.cs и добавим ещё один класс, файл для которого назовём IMyService.cs.
Добавим ссылку на сборку System.ServiceModel.
В файле MyService.cs опишем реализацию интерфейса:На этом разработка сервиса завершена. Переходим к созданию службы Windows, которая будет контейнером для данного сервиса.
В том же решении (Solution) создадим новый проект типа «Служба Windows». Называем проект WindowsServiceHostForMyService.
Затем файл Service1.cs (только что созданного проекта) переименуем в MyService.cs. В этот проект добавим ссылку на сборку System.ServiceModel, а также не забываем указывать в файле MyService.cs директивы:
В классе MyService добавляем новый член:
Также необходимо добавить ссылку на проект WCFMyServiceLibrary, который находится в этом же решении:
Затем в классе MyService изменим метод OnStart таким образом, чтобы в этом методе добавлялись конечные точки нашего сервиса (endpoint):
Затем реализуем остановку сервиса в методе OnStop:
Затем в Обозревателе решения — двойной клик на файле MyService.cs (проекта WindowsServiceHostForMyService) откроет этот файл в режиме конструктора (Design Mode).
На пустом пространстве вызываем контекстное меню (щелчок правой кнопкой мыши) и выбираем «Добавить установщик».
При этом будет создан новый класс ProjectInstaller.cs
Переименуем файл ProjectInstaller.cs в MyServiceInstaller.cs.
При этом выйдет окно с вопросом, следует ли переименовать зависимые объекты – отвечаем «Да».
Добавим в файл ссылку
Затем изменим код конструктора класса MyServiceInstaller:
Заметим, что вызов метода InitializeComponent() мы заблокировали с помощью комментария.
На этом разработка службы Windows завершена. Собираем всё решение (Build Solution) и переходим к следующему этапу – установка службы Windows.
Для установки нашей службы создадим bat-файл (с произвольным названием, например Install_Windows_Service.bat) следующего содержания:
Нужно скопировать этот bat-файл в ту же папку, где находится скомпилированный файл WindowsServiceHostForMyService.exe (вам нужно заранее продумать, в какой папке будет лежать этот файл, который будет всегда запущен в качестве службы Windows).
Запускаем bat-файл, после чего наша программа WindowsServiceHostForMyService.exe будет установлена в качестве службы Windows.
Запустим эту службу с помощью стандартной программы управления службами.
Следующий этап – разработка клиентского приложения для использования предоставляемых сервисом услуг.
Для этого прежде всего нужно организовать так называемый «переходник» — Service Proxy – набор настроек, описывающих сервис для клиентского приложения.
Воспользуемся для этого стандартной утилитой SvcUtil.exe. Создадим файл Generate_Proxy.bat следующего содержания
Запустим этот файл (стандартная утилита SvcUtil.exe находится в папке C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin).
Этот файл нужно запустить во время работы нашего сервиса, т.е. в данном случае, после успешного запуска службы Windows WindowsServiceHostForMyService.
В случае успешного запуска, программа SvcUtil.exe сгенерирует 2 файла — MyServiceProxy.cs и App.config.
Эти файлы необходимо добавить для клиентского приложения, чтобы это приложение могло вызывать методы нашей службы (чуть ниже вы узнаете, что файл App.config я решил не добавлять — обойдёмся и без него).
Примечание. Аналогичного результата можно было добиться, запустив
В том же решении (Solution) создадим обычное приложение Windows Forms. Назовем его WindowsFormsApplication1
Добавим в этот проект ссылку на System.ServiceModel и, конечно же,
Добавим в этот проект файл MyServiceProxy.cs (именно его мы сгенерировали утилитой SvcUtil.exe). При этом следует добавить в файл MyServiceProxy.cs следующие строки:
После этого, мы сможем ссылаться на класс MyServiceClient (этот класс создан программой SvcUtil.exe), указав в файле формы директиву.
Поступим неординарно – и не будем добавлять файл App.Config в проект клиента!
Кнопка btn_Start – создаёт клиента
Кнопка btn_Send – отправляет сервису текстовую строку из текстового поля
Кнопка btn_Close – удаляет клиента из памяти и закрывает приложение
Заметим, что в данном примере на клиенте мы совсем не использовали конечную точку
Итоги WCF
Читайте также: