Настройка CultureInfo для вызовов служб wcf?

У меня работает служба WCF, которая должна анализировать некоторые данные. Оказывается, данные (точки, размеры) преобразуются по-разному в разных культурах, и разбор распространяется на множество классов и методов. Поскольку весь синтаксический анализ выполняется без передачи CultureInfo, успех синтаксического анализа зависит от культуры потоков.

поскольку нет программного параметра CultureInfo, служба каким-то образом выбирает текущий cultureinfo с машины. У меня есть не знаю, где он это получает, поскольку изменения региональных и языковых параметров, похоже, не влияют на cultureinfo службы wcf. Также изменения в интернете.config (да, служба размещена в iis), похоже, тоже не работает.

У меня действительно остался только один вариант? Установка CultureInfo программно? Я мог бы найти все вызовы преобразования и передать в CultureInfo или я мог бы установить его в потоке.CurrentThread.Свойства currentculture. Есть ли способ я могу установить CultureInfo раз и навсегда-оказывает влияние на все открытые методы wcf?

3 ответов


ответ об использовании тега в web.config работает только если Asp.net включен режим совместимости. Вам также нужно следующее внутри:

<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>

без Asp.Net режим совместимости, модули http не используются и тег игнорируется.


вы должны проверить это сообщение в блоге...

http://blogs.msdn.com/drnick/archive/2008/02/26/using-call-context-initializers-for-culture.aspx

... что показывает, как определить поведение для установки культуры.

однако, web.config должен быть вашим другом здесь. Вы должны иметь возможность настроить культуру "по умолчанию", с которой работает ваша служба.

глобализация elemenent...

http://msdn.microsoft.com/en-us/library/hy4kkhe0.aspx

... должно позволить вам установить культуру и UICulture...

<globalization
    enableClientBasedCulture="true|false"
    requestEncoding="any valid encoding string"
    responseEncoding="any valid encoding string"
    fileEncoding="any valid encoding string"

    responseHeaderEncoding = "any valid encoding string" 
    resourceProviderFactoryType = string
    enableBestFitResponseEncoding = "true|false"

    culture="any valid culture string"
    uiCulture="any valid culture string"/>

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