Настройка CultureInfo для вызовов службы wcf? - PullRequest
6 голосов
/ 28 апреля 2009

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

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

Действительно ли у меня остался только один вариант? Настройка CultureInfo программно? Я мог бы найти все конверсионные вызовы и передать в CultureInfo, или я мог бы установить его на Thread.CurrentThread.CurrentCulture. Разве я не могу установить CultureInfo раз и навсегда - повлиять на все доступные методы wcf?

Ответы [ 3 ]

5 голосов
/ 12 мая 2009

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

<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>

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

3 голосов
/ 28 апреля 2009

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

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

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

ОДНАКО, web.config должен быть вашим другом здесь. Вы должны быть в состоянии установить культуру «по умолчанию», с которой работает ваш сервис.

Элемент глобализации ...

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"/>
0 голосов
/ 28 апреля 2009

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

...