.NET - развертывание клиента WCF без app.config - PullRequest
22 голосов
/ 07 октября 2011

Я пишу клиента в службу WCF.Это отдельное приложение в более крупной системе, которое включает модули, написанные на C #, C ++, VB и Java.Все приложения имеют общие механизмы настройки и ведения журнала, независимо от того, на каком языке они были написаны.

Я хотел бы выяснить, как создать клиентское приложение, чтобы оно работало без app.config.Зачем?Поскольку большая часть того, что находится в app.config, представляет собой шаблон, в котором системным администраторам нельзя разрешать изменять, и какие параметры системным администраторам следует разрешать изменять, они должны быть в общесистемной конфигурации, а не в файле app.config.сидя в папке binс.Большая часть этого была вставлена ​​Visual Studio.Я сделал одно изменение в файле - я увеличил максимальный размер в <readerQuotas/>.Но это изменение, с которым я не хочу связываться сисадминами.И в этом файле нет ничего, с чем я хотел бы связываться сисадминами, кроме <endpoint address=""/>.

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

Итак, как мне настроить вещи так, чтобы они мне не нужны?

Могу ли я встроить его в качестве ресурсав сборке и подключиться к процессу загрузки app.config, как я делаю с необходимыми DLL?

Является ли единственным выбором для создания кода для настройки вещей, так как я использую код для установки конечной точкиадрес?Создать необходимые привязки и т. Д. В коде?Как же тогда узнать, какой код писать, учитывая эти куски непрозрачного XML?

Ответы [ 2 ]

38 голосов
/ 07 октября 2011

Вы можете использовать следующий код для создания привязок, что и делает конфигурация.Я не уверен, позволит ли это вообще удалить файл, но приложение не будет использовать конфигурацию, если это так.Укажите свои собственные значения в тайм-аутах и ​​т. Д.

    var binding = new WSHttpBinding();
    binding.SendTimeout = new TimeSpan(0, 0, 0, 0, 100000);
    binding.OpenTimeout = new TimeSpan(0, 0, 0, 0, 100000);
    binding.MaxReceivedMessageSize = 10000;
    binding.ReaderQuotas.MaxStringContentLength = 10000;
    binding.ReaderQuotas.MaxDepth = 10000;
    binding.ReaderQuotas.MaxArrayLength = 10000;
    var endpoint = new EndpointAddress("http://localhost:57102/MyService.svc");
    var myClient = new WebServiceclient(binding, endpoint);
0 голосов
/ 07 октября 2011

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

Я предлагаю вам предоставить адрес (имя хоста и номер порта) пользователям и разрешить им каким-либо образом настроить его, поскольку адреса зависят от того, где размещены ваши службы WCF.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...