четверг, 30 сентября 2010 г.

MEX endpoint и ошибка 400

Пусть есть некоторая WCF служба, у которой определен MEX endpoint:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="GeneralBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>

    <services>
      <service name="WcfTest.Core.TalkingService" behaviorConfiguration="GeneralBehavior">
        <endpoint address="" binding="basicHttpBinding" contract="WcfTest.Core.ITalkingService" />
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
    </services>

    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
    <directoryBrowse enabled="true" />
  </system.webServer>

</configuration>

Служба хостится в IIS по адресу http://localhost/WcfTest.IISHost/TalkingService.svc. Заходим браузером на этот адрес и видим сообщение, поясняющее, что мы можем сделать с этой службой. В сообщение предлагается получить WSDL, перейдя по ссылке http://localhost/WcfTest.IISHost/TalkingService.svc?wsdl. Это работает, именно для этого был использован httpGetEnabled.

Однако при попытке перейти по адресу http://localhost/WcfTest.IISHost/TalkingService.svc/mex, указанному в MEX endpoint, мы получим от сервера ошибку HTTP 400 Bad request. Почему, мы же разрешили MEX? Плюс WCFTestClient нормально работает с этим адресом.

Дело в том, что mexHttpBinding использует SOAP и ожидает POST запрос, поэтому к нему нельзя обратиться через браузер. Единственный способ получить браузером WSDL - использовать параметр ?wsdl.

Найдено здесь и здесь.

вторник, 21 сентября 2010 г.

Использование WSE в Windows 7 x64

WSE поддерживается только 2005 студией. Установщик WSE терпит неудачу при обновлении конфига студии, в результате чего она неверно генерирует прокси-классы. Для решения этой проблемы необходимо добавить в файл C:\Program Files (x86)\Microsoft Visual Studio 8\Common7\IDE\devenv.exe.config следующий код:

<configuration>
  <system.web>
    <webServices>
      <soapExtensionImporterTypes>
        <add type="Microsoft.Web.Services3.Description.WseExtensionImporter, Microsoft.Web.Services3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
      </soapExtensionImporterTypes>
    </webServices>
  </system.web>
</configuration>

Найдено здесь.

среда, 15 сентября 2010 г.

Установка boost под Windows

Второй пост из серии «Простой проект с использованием CMake, log4cxx, boost». Рассмотрим установку библиотек boost под Windows.

Существует два способа:
  1. собрать из исходников
  2. использовать инсталлятор

Выберем второй, как более простой. Boost Installer находится здесь, последняя на данный момент версия 1.44.0. Для работы установщика необходимо соединение с Интернет.

После запуска и принятия лицензии будет предложено выбрать зеркало, следует оставить значение по умолчанию (Nearest SourceForge Mirror). Затем требуется указать варианты конфигурации бинарников.


Данное окно позволяет выбрать вариант установки библиотеки. Например, если выбрать Visual C++ 2010, Multithread Debug DLL, то будут загружены все компоненты boost'а, собранные под 10-ую студию в динамически загружаемую библиотеку с отладочной информацией. Нам все компоненты не нужны, поэтому никаких галочек здесь не ставим, вместо этого выбираем отдельные компоненты.


Для текущего проекта понадобится Boost Filesystem, Boost System и все заголовочные файлы. Выбираем варианты Multithread Debug DLL и Multithread DLL под vs10.0. В PATH (Add to path чекбокс) ничего добавлять не нужно. Destination Folder оставляем по умолчанию. Затем следует процесс скачивания выбранных компонентов. Если возникают проблемы с доступностью серверов и соединение рвется, следует перезапустить установщик с теми же параметрами.

На вопрос об обновлении PATH отвечаем отрицательно, это действие выполним вручную. Поскольку мы будем линковаться с динамически загружаемыми библиотеками, они должны быть доступны нашей программе при запуске. Для этого в PATH добавляем C:\Program Files\boost\boost_1_44\lib, т.е. папку с бинарными файлами boost'а.

На этом установку можно считать законченной.

ReSharper: имена обработчиков событий UI

По умолчанию VS генерирует имена методов, подписанных на события UI, по шаблону
объект_событие, однако решарпер подчеркивает эти имена как имеющие неверный стиль. Для исправления открываем его настройки (ReSharper --> Options) и на странице Languages --> C# --> C# Naming Style выбираем опцию Override Common Settings. В таблице выделяем Methods, Properties and Events и нажимаем Advanced Settings. В поле Event subscriptions on fields вместо $object$_On$event$ пишем $object$_$event$.



Взято здесь.

вторник, 7 сентября 2010 г.

MS SQL CE 3.5: Список файлов

Полезная статья, содержащая списки бинарных файлов MS SQL CE 3.5 для разных сценариев частного развертывания.

четверг, 2 сентября 2010 г.

Bash: как сделать trim()?

Q: Как сделать trim() в bash?


A:
~$ echo " test" | tr -d " "