Конфигурация WCF - Разделение это из app.config

Если вы используете mac os для запуска некоторых задач в автономном режиме,

Просто не забудьте включить remote ssh connection в ваш system preference -> sharing (я не знаю, почему мы должны делать что)

Перед тем, как включить его, мне понадобится около 1 минуты для запуска spark-submit xx.py

. После включения его мне потребуется всего 3 секунды, чтобы запустить его.

Надеюсь, это поможет другим людям решить проблемы на платформе Mac os

16
задан ZombieSheep 28 January 2009 в 11:15
поделиться

8 ответов

У меня есть тенденция программно настроить все мои сервисные настройки.

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

Это легко сделать (читающий код файла INI, не включенный):

        // create the URI which is used as the service endpoint
        Uri tcpBaseAddress = new Uri(
                string.Format("net.tcp://{0}:{1}",
                    LocalIPAddress.ToString(), GeneralPortNumber));

        // create the net.tcp binding for the service endpoint
        NetTcpBinding ntcBinding = new NetTcpBinding();
        ntcBinding.Security.Mode = SecurityMode.None;
        System.ServiceModel.Channels.Binding tcpBinding = ntcBinding;

        // create the service host and add the endpoint
        Host = new ServiceHost(typeof(WordWarService), tcpBaseAddress);

, Так как мы можем настроить хост (и клиент, в этом отношении) программно, нет ничего мешающего Вам предоставить настройки любым способом, который Вы выбираете (база данных, xml, сумасшедший текстовый файл, и т.д.).

5
ответ дан 30 November 2019 в 17:05
поделиться

Можно выделить конфигурацию WCF с помощью configSource. Инструкции здесь:

http://weblogs.asp.net/cibrax/archive/2007/07/24/configsource-attribute-on-system-servicemodel-section.aspx

Другая опция состоит в том, чтобы настроить Ваши сервисы WCF программно.

17
ответ дан 30 November 2019 в 17:05
поделиться
using System;
using System.Configuration;
using System.IO;
using System.ServiceModel;
using System.ServiceModel.Configuration;

namespace ConsoleHost
{
    public class CustomServiceHost : ServiceHost
    {
        public CustomServiceHost(string customConfigPath, Type serviceType, 
            params Uri[] baseAddresses)
        {
            CustomConfigPath = customConfigPath;
            var collection = new UriSchemeKeyedCollection(baseAddresses);
            InitializeDescription(serviceType, collection);
        }

        public string CustomConfigPath { get; private set; }

        protected override void ApplyConfiguration()
        {
            if (string.IsNullOrEmpty(CustomConfigPath) ||
                !File.Exists(CustomConfigPath))
            {
                base.ApplyConfiguration();
            }
            else
            {
                LoadConfigFromCustomLocation(CustomConfigPath);
            }
        }

        void LoadConfigFromCustomLocation(string configFilename)
        {
            var filemap = new ExeConfigurationFileMap
            {
                ExeConfigFilename = configFilename
            };
            Configuration config = ConfigurationManager.
                OpenMappedExeConfiguration(filemap, ConfigurationUserLevel.None);

            var serviceModel = ServiceModelSectionGroup.GetSectionGroup(config);

            bool loaded = false;
            foreach (ServiceElement se in serviceModel.Services.Services)
            {
                if (se.Name == Description.ConfigurationName)
                {
                    LoadConfigurationSection(se);
                    loaded = true;
                    break;
                }
            }

            if (!loaded)
                throw new ArgumentException("ServiceElement doesn't exist");
        }
    }
}

После этого класса просто используйте его, как обычно, для инициализации хоста службы

myServiceHost = new CustomServiceHost (ConfigFileName, typeof (QueryTree));

myServiceHost.Open ();

6
ответ дан 30 November 2019 в 17:05
поделиться

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

, К сожалению, это кажется менее, чем простым.....

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

Вот пример загрузка конфигурация WCF от пользовательского местоположения конфигурации .

Это могло бы получить Вас движение? Я все еще надеюсь, что смогу выяснить, что "загрузка моей конфигурации от таблицы базы данных" однажды..... просто должна подавить шумы недели на работе, я предполагаю :-)

2
ответ дан 30 November 2019 в 17:05
поделиться

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

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

Однако я не большой поклонник выполнения этого вообще - слишком много продолжения связи, и это довольно грязно.

Это действительно, тем не менее, показывает, что это возможно - это - одна вещь думать о в Вашем дизайне.

0
ответ дан 30 November 2019 в 17:05
поделиться

Можно сделать как это:

<system.serviceModel configSource="wcf.config"/>

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

0
ответ дан 30 November 2019 в 17:05
поделиться

Я нашел эту статью, которая может вам помочь. Я не пробовал, но это кажется довольно простым.

http://weblogs.asp.net/cibrax/archive/2007/07/24/configsource-attribute-on-system-servicemodel-section.aspx

" Атрибут configSource впервые был введен в .NET framework 2.0 для поддержки внешних файлов конфигурации. Этот атрибут можно добавить в любой раздел конфигурации, чтобы указать внешний файл для этого раздела.

К сожалению, группа разделов system.serviceModel не поддерживает этот атрибут. Если вы попытаетесь добавить его, вы получите следующее исключение:

Атрибут 'configSource' не может быть указан, потому что его имя начинается с зарезервированного префикса 'config' или 'lock'

Я выяснил, что вы этот атрибут можно использовать в различных разделах system.serviceModel, таких как службы, поведения или привязки. "

3
ответ дан 30 November 2019 в 17:05
поделиться

System.ServiceModel.Configuration.ConfigurationChannelFactory и др. поддерживают чтение конфигурации из экземпляра System.Configuration.Configuration. Это означает, что вы можете поместить в специальный файл, не обращаясь к нему из web/app.config. Вы можете иметь несколько файлов конфигурации, по одному для каждого клиента.

SharePoint 2010 чрезмерно использует это в своей модели сервисных приложений, где каждый сервисный прокси читает свои настройки из специального .config, который не обязательно является web.config или app.config и даже не ссылается оттуда.

1
ответ дан 30 November 2019 в 17:05
поделиться
Другие вопросы по тегам:

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