У меня есть простая потребность в WCF - в основном клиенты, работающие изолированно, и сервер, поэтому действительно клиент / сервер неотъемлемо.
WCF помогает нам отделить сервисный уровень и применить подход SOA для масштабирования.
Все, что мы делаем на сервере (на вызов / множественный параллелизм), - это запись в БД, а затем выполнение некоторого ввода-вывода для другой системы, которая будет немедленно использоваться для - но это может измениться по мере формирования (неизвестных) требований.
Скорость: нам нужно, чтобы служба была буквально быстрой, насколько это возможно: 1 секунда в порядке - 2 медленная - и некоторые ошибки необходимо немедленно отправить обратно.
Я рассматривал возможность использования асинхронного серверашаблоны, очереди (MSMQ), Azure, чтобы позволить сервисному методу ставить в очередь и быстро возвращаться.NB. Однако, некоторая обработка может быть «онлайн» в службе WCF (запись в db) с немедленным возвратом с ответом / ошибкой, другие могут быть в автономном режиме (IO).Недостаток: для этого требуется средство для обратного вызова клиента, если есть ошибка show-stopper и дизайн и разработка соответственно масштабируются.
i) Хотя WCF учитывает услугу, я рассматриваю технологию как предоставление межпроцессного канала связи, и, возможно, фактические операции службы должны выполняться в win-сервисах.Например.WCF записывает в БД, которая долго обрабатывается и получает запрос.По мере того, как система становится все больше и больше, некоторые операции могут привести к пожару и забыть о долгой работе - которая завершена или необходима спустя несколько часов.Мы можем вывести их из непосредственной петли.Это действительно разделение, даже если это замедляет нас.Метод WCF не может передаваться службе, если он не вызывает другую службу WCF и не может вызывать службу Windows!
С архитектурной точки зрения, нормально ли, чтобы некоторые операции завершались и возвращались, а другие передавались в настоящую шину или службу (по какому-то механизму)?Я переусердствовал в этом?
ii) Поскольку все операции db и IO займут, скажем, максимум 1 или 2 секунды, я чувствую, что могу просто вызвать службу aysnc из клиента и ждать еевернуться, а затем выполнить маршал обратно в пользовательский интерфейс клиента.Это тоже просто.Это может оказаться неправильным решением в долгосрочной перспективе, но, сказав, что все операции уровня обслуживания будут находиться в отдельной dll, чтобы они могли быть вызваны другой службой для последующего масштабирования.Вызов метода может быть помечен как немедленный или очередь для обработки, скажем.
Мысли ?