6 июня 2017 г.

Как отключить публикацию метаданных mex WCF сервисом.

Оглавление:

  1. WCF service. С чего начать. Основные моменты создание службы. 
  2. WCF. Callback через BasicHttpBinding без дуплексной связи.
  3. Realtime WCF Tracker вызовов клиентского приложения.
  4. Как отключить публикацию метаданных mex WCF сервисом. 

Публикация метаданных вашего сервиса может снизить безопасность системы. Ведь вы предоставляете возможность узнать всю необходимую для работы с ним информацию. При этом, отсутствие возможности получить информация никак не влияет на его работу. Поэтому хотелось бы рассказать как убрать публикацию метаданных сервиса, если не вы их включали. Для начала стоит знать, что метаданные могут быть доступны двумя способами:
  • Через HTTP-GET .
  • И через специально подготовленную Endpoint для MEX, используя IMetadataExchange.
На MSDN есть две статьи, описывающие наоборот, оба процесса настройки. Поэтому можно опираться и на них:

1. Проверяем файл конфигурации сервера.
1.1 Ищем HTTP-GET

Открываем файл конфигурации, в котором хранятся настройки для ваших сервисов. И ищем раздел  <serviceBehaviors

<system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="SERVICEMETADATANAME">
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

Если таковой имеется, тогда ищем tag <behavior/>, у которого внутри есть <serviceMetadata />. Значения атрибутов http(s)GetEnabled="True" говорят о том, что все <services />, у которых задано <service behaviorConfiguration="SERVICEMETADATANAME"  />, будут публиковать свои метаданные. Поэтому для того, что бы отключить публикацию достаточно задать:<serviceMetadata httpGetEnabled="false" httpsGetEnabled="false" />
ВНИМАНИЕ! Если используется пустое значение name <behavior name="">, это говорит о том, что данное поведение будет применено ко ВСЕМ Endpoint вне зависимости от того, где происходит инициализация ServiceHost. Ещё одно замечание, Endpoint не может работать одновременно в режиме httpEnabled="false" и httpsEnabled="true" поэтому надо менять оба параметра.
 Запускаем Web сервер. Если при обращении к сервисам получаете сообщение
"Metadata publishing for this service is currently disabled", значит все сделано правильно.

4 июня 2017 г.

WSDL import в Visual Studio из файла или текста.

Когда пишется Web сервис, разработчику стоит задуматься о безопасности. Один из простых способов это скрытие из публичного доступа WSDL информации. Поэтому представьте ситуацию: вы интегрируетесь с какой то внешней системой. Разработчики этой системы присылают .docx файл с документацией к ней. Внутри содержится текст XML <wsdl:definitions /> и сразу встает вопрос, как же это использовать.
  1. Первым делом выделяем всю XML из документа, копируем и сохраняем в отдельном файле с расширением .asmx.
  2. Далее отрываем Visual Studio жмем по References правую кнопку и выбираем "Add Service Reference..."
  3. В отрывшемся окне добавления ссылки в поле Address вводим строку формата "file://PATH.asmx" жмем GO и видим, что студия успешно считала содержащуюся в файле информацию о сервисе.
  4. После нажатия на можно начать работу со службой, передав в класс посредник её адрес. Пример создания клиента указан ниже:

Snoop WPF. Как использовать? Полное описание на русском.

При разработке интерфейса на WPF, не раз может возникать ситуация, когда требуется найти тот или иной элемент управления в Visual Tree приложения, узнать его свойства или путь до него. Если работодатель еще не приобрел Visual Studio 2015, в котором была добавлена функция UI Debugging, то можно использовать бесплатную утилиту Snoop. О всех её особенностях я постараюсь рассказать далее.

Главное окно Snoop.


После установки и запуска у вас на экране появится небольшое окошко:

  1. Кнопка цели под номером один позволяет выбрать конкретное окно приложения. Если зажать левую кнопку мыши на прицеле, то мышь превратится в такой же прицел. Далее не отпуская левую кнопку надо навести на окно (заголовок или любое место внутри) вашего приложения. Если все сделать правильно, то покажется окно с Visual Tree. При этом, если у приложения два и более окон, то можно с помощью этого прицела выбирать нужное вам окно.
  2. В ситуации, когда приложения работает, а окно скрыто, можно воспользоваться кнопкой поиска всех совместимых окон работающих процессов. После нажатия кнопку обновить (2), все WPF приложения появятся в списке пункта три.
  3. Если вы воспользовались кнопкой в пункте два, то в раскрывающемся списке появятся все работающие WPF приложения.
  4. При нажатии на бинокль, если в списке пункта три присутствует приложение, тогда откроется Visual Tree его главного окна. 
  5. С помощью этого прицела, можно выбрать окно для визуального просмотра всех его элементов управления. При просмотре есть возможностью увеличить какой то участок окна, рассмотрев все с точностью до 1 пикселя. Так же слева в углу можно увидеть 3D режим, тем самым понять, как получается видимый Layout.
  6. Запускает аналогичное действие с пунктом пять, но с выбранным в списке окном приложения.

Описание основных возможностей Visual Tree окна.


На изображении ниже представлены два окна. Слева окно вашего приложения, справа окно, которое появится если зажать прицел у начала стрелки и перетащить на ваше приложение. В появившемся окне можно увидеть Visual Tree вашего приложения: