2016-09-11 5 views
0

Я несколько новичок в WCF, и я столкнулся с очень простой проблемой дизайна, которая, как я предполагаю, имеет хорошо установленные ответы. Я создал основное приложение (одно экземпляра), которое выполняет всю «бизнес-логику»: подключается к базе данных и стороннему API, выполняет команды администратора и т. Д. Это приложение предназначено для запуска на серверной машине, а мое Следующим шагом будет создание WcfServiceLibrary сверху, чтобы конечные пользователи могли удаленно выполнять команды с помощью Wcf-клиентов.WCF: Как создать WcfServiceLibrary отдельно от основного приложения

Логически WcfServiceLibrary делает ссылку на основную сборку приложения. Назовите меня наивным, но я подумал, что это позволит мне получить доступ к основным объектам и методам приложения. Ну, но это происходит, но создавая дубликат основного приложения в процессе WcfServiceLibrary, который является не-go. (Я также обнаружил, что при доступе изнутри WcfServiceLibrary дублируется single-instance application!)

Как решить эту проблему? До сих пор я имею в виду следующее:

  • Self-host служба ФОС в главном приложении: возможно, но я бы потерять четкое разделение между «бизнес-логики» и логики обслуживания
  • методы использования IPC для связи между основное приложение и WcfSrviceLibrary: это выглядит как излишний, поскольку он создает еще один уровень серверно-клиентского интерфейса (за исключением, возможно, если я использую COM вне процесса)
  • Любой другой способ?

Заранее благодарим за вашу помощь! Я хочу верить, что есть простое решение этой проблемы за углом ...!

+0

Извлеките всю логику в отдельную сборку, обратитесь к этому сборку как из основного приложения, так и из вашего wcf-сервиса? – Evk

+0

@Evk. Такая сборка по-прежнему будет загружаться дважды: один раз для основного приложения, запущенного на сервере, и второе (или более) время всякий раз, когда создается служба Wcf. Мне нужна служба Wcf, обращающаяся к главному приложению, без дублирования ее внутри. – phaedo

+0

Если вы находитесь на сервере, зачем вам нужно основное приложение? Почему бы просто не использовать только службу wcf? – Evk

ответ

0

Это может быть то, что вы ищете ...

public static class RealAppCoreHelper 
{ 
    private static RealAppCoreObject m_GlobalAppInstance = null; 

    public static RealAppCoreObject GetGlobalMainInstance() 
    { 
     // return the one and only instance of our main app 

     if (m_GlobalAppInstance == null) 
     { 
      m_GlobalAppInstance = new RealAppCoreObject(); 
     } 

     return m_GlobalAppInstance; 
    } 
} 

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

+0

Это создаст дубликат экземпляра основного приложения в WcfServiceLibrary. Помните, что основное приложение работает на сервере до того, как вызывается WcfServiceLibrary для размещения службы. – phaedo

 Смежные вопросы

  • Нет связанных вопросов^_^