Как я могу указать альтернативный файл конфигурации для клиента WCF?

Здесь есть два тесно связанных понятия:

  1. Выравнивание, требуемое процессором для доступа к конкретному объекту
  2. Выравнивание, которое фактически использует компилятор для помещения объектов в память

Чтобы обеспечить требования к выравниванию элементов конструкции, выравнивание структуры должно быть как минимум таким же строгим, как и выравнивание ее самого строгого элемента. Я не думаю, что это прямо указано в стандарте, но оно может быть выведено из следующих фактов (которые изложены в стандарте индивидуально):

  • Структуры являются разрешено иметь отступы между их членами (и в конце)
  • Массивы не разрешено иметь отступы между их элементами
  • Вы можете создать массив любой структуры type

Если бы выравнивание структуры было не менее строгим, чем у каждого из его членов, вы не смогли бы создать массив структур, так как некоторые элементы структуры, некоторые элементы не были бы правильно выровнены.

Теперь компилятор должен обеспечить минимальное выравнивание для структуры на основе требований выравнивания его элементов, но он также может выравнивать объекты более строго, чем требуется, это часто делается из соображений производительности. Например, многие современные процессоры разрешают доступ к 32-разрядным целым числам при любом выравнивании, но доступ может быть значительно медленнее, если они не выровнены по 4-байтовой границе.

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

Также не существует переносимого способа (по крайней мере, в C), чтобы определить, как компилятор будет на самом деле выравнивать объект, хотя у многих компиляторов есть опции для обеспечения некоторого уровня контроля над выравниванием.

8
задан Jay 21 October 2009 в 03:46
поделиться

3 ответа

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

1
ответ дан 5 December 2019 в 10:42
поделиться

Или вы можете сделать это простым и легким способом - и реализовать собственный файл конфигурации, как в этом посте, который использует модель DataSet / DataTable для хранения / извлечения вашей конфигурации (включая рабочий код ):

(.Net) предложения по созданию файла конфигурации для программы?

0
ответ дан 5 December 2019 в 10:42
поделиться

вы не можете делать это как хотите - вы можете приблизиться, но не можете сделать это полностью.

Что вы могли бы сделать, так это добавить этот раздел в файл конфигурации основного приложения:

<system.serviceModel>
   <bindings configSource="bindings.config" />
   <behaviors configSource="behaviors.config" />
   <client configSource="client.config" />
   <services configSource="services.config" />
  .....
</system.serviceModel>

Итак, для каждого в разделе , вы можете указать внешний файл конфигурации с помощью атрибута configSource = (и не позволяйте красным волнистым линиям Visual Studio путать его - да, это ДЕЙСТВИТЕЛЬНО работает!)

Вы можете сделать это для любой конфигурации раздела - но, к сожалению, нет способа сделать это для всей группы разделов ( ).

Марк

5
ответ дан 5 December 2019 в 10:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: