Как запустить экземпляр процесса WCF вне процесса? - PullRequest
2 голосов
/ 15 декабря 2009

Я хотел бы запустить новый экземпляр узла службы wcf из другого приложения (UI). Мне нужно, чтобы служба была вне процесса, потому что я хочу использовать весь предел памяти 1,4 ГБ для 32-битного .NET-процесса.

Очевидный метод - использовать System.Diagnostics.Process.Start(processStartInfo), но я бы хотел выяснить, хороший это или нет. Я планирую связать exe хост-службы с приложением пользовательского интерфейса. Когда я начну процесс, я передам ключевые параметры для службы WCF (например, порты и адреса и т. Д.). Приложение пользовательского интерфейса (или другие приложения) затем подключится к этому новому процессу для взаимодействия со службой. Как только служба какое-то время не работает, она отключается или пользовательский интерфейс может явно сделать вызов, чтобы закрыть службу.

Ответы [ 2 ]

3 голосов
/ 15 декабря 2009

Вы определенно можете сделать это:

  • создайте консольное приложение, в котором размещены ваши ServiceHost
  • уведомить консольное приложение о наборе параметров командной строки (или настроить их в app.config консольного приложения)
  • запустите консольное приложение, используя Process.Start() из приложения UI

Это должно быть довольно легко сделать, я бы сказал.

0 голосов
/ 15 декабря 2009

Возможно, я здесь полностью вне базы, но я не думаю, что существует ограничение в 1,4 ГБ памяти для процессов .NET. Память, выделенная для каждого процесса, управляется ОС. Для 32-разрядных операционных систем доступно 4 ГБ памяти, но она распределяется между всеми процессами. Поэтому, хотя может показаться, что доступно только 1,4 ГБ, это технически неверно.

Единственная причина, по которой я привел это, состоит в том, чтобы сказать, что другой способ подойти к этому - загрузить службу WCF внутри отдельного домена приложений внутри вашего пользовательского интерфейса. Класс System.AppDomain можно рассматривать как легкий процесс внутри процесса. Домены приложений также могут быть выгружены, когда вы закончите с ними. А поскольку WCF может пересекать границы AppDomain, а также границы процессов, это просто другое соображение.

Если вы не знакомы с доменами приложений, то рекомендуемый @marc_s подход является наиболее простым. Однако, если вы ищете оправдание, чтобы узнать о доменах приложений, это была бы отличная возможность сделать это.

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