Является ли WCF правильным выбором для меня? - PullRequest
3 голосов
/ 27 июля 2010

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

Описание проблемы:

Клиенты последовательно получают доступ к объектам домена из списка примерно раз в 1-10 минут (в среднем это 2 минуты), но никакие 2 клиента никогда не должны обращаться к одному и тому же объекту. Некоторые заказы должны быть сохранены в списке.

Пример использования:

Client X -> WCFService::GetNextObject() -> Fetch from DB, sort
         <- return nextObject

Where X is [1,~200)

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

[Редактировать] Некоторые пояснения: существуют другие схемы сортировки для разных уровней приоритета, которые должны ссылаться на связанные записи в бесчисленных других таблицах - это кажется слишком сложным, но для этого есть обоснованный бизнес-пример. Аналогично, объекты добавляются и удаляются из этого списка потенциально очень часто (но в среднем редко). [/ Edit]

Я смотрю на использование WCF, чтобы люди из любого географического местоположения могли использовать его через LAN / WAN, и это обеспечит поддержание порядка и отсутствие двух одинаковых объектов nextObject. Правильно ли я считаю, что WCF - хороший выбор для этого?

Что меня интересует, так это состояние службы WCF? Или, лучше сказать: это без гражданства? Будет ли каждый клиентский доступ к сервису создавать новый логический экземпляр WCF? И если да, то как обычно достигается синхронизация / блокировка?

Следует отметить, что все остальное в компании разработано в стеке .NET, поэтому очевидно, что существует сходство с технологиями .NET. Это, однако, не обязательно в любом случае.

Ответы [ 4 ]

3 голосов
/ 27 июля 2010

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

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

Вот (подробное!) Объяснение экземпляров WCF: http://msdn.microsoft.com/en-us/magazine/cc163590.aspx

1 голос
/ 27 июля 2010

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

0 голосов
/ 27 июля 2010

Я согласен с Джейком, но хочу добавить несколько вещей:

  1. Клиенты могут потерпеть неудачу или уйти, поэтому важно не просто передать им объект и потерять контроль над ним. Обычный способ заключается в том, чтобы сдать их в аренду на определенный период времени, чтобы, если они не завершили обработку, объект сразу вернулся в очередь. Я подозреваю, что в вашем случае он вернется в начало очереди, но чаще всего это конец. Вы также хотите отслеживать повторные попытки в случае, если какой-либо объект токсичен и не может быть обработан.

  2. Если все ваши клиенты не являются .NET, вы захотите придерживаться более универсальных частей WCF.

0 голосов
/ 27 июля 2010

Мне кажется, что вы просто получаете данные из службы в очереди с несколькими клиентами.

Если это так, вы должны просто использовать SQL Server, а это буквально таблица очередей в базе данных. Каждый раз, когда клиент вытаскивает элемент из таблицы, он обновляет приоритеты других артефактов.

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

Просто используйте SQL Server или SQL Server Express, если вы хотите его бесплатно, и вы получите все блокировки и т. Д. Бесплатно.

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