2013-05-26 3 views
1

Мне нужно решение, в котором экземпляр объекта, содержащего информацию о конфигурации, размещается в службе Windows, и многие (до 1000) или более одновременных клиентов взаимодействуют с этим объектом.Удаляет подходящее решение для этого сценария?

Клиенты будут обращаться к объекту при запуске и периодически во время работы, когда клиент выполняет свою задачу. Клиенты редко обновляют конфигурацию. Изменения в конфигурации должны передаваться/отражаться на всех клиентах, когда они происходят (без опроса).

Удалено ли подходящее решение для этого? Я надеялся избежать написания полного сервера клиентской системы & и т. Д.

+1

Вы должны просто использовать WCF. Используйте одно из высокопроизводительных привязок, таких как двоичный код по протоколу TCP/IP. –

ответ

1

Да, удаленное соединение является подходящим решением, однако, если вы используете .NET 3.5 или выше, вы можете рассмотреть использование WCF, который превосходит удаленный доступ и использует привязку nettcp.

+0

Я буду использовать .NET 4.0, поэтому буду читать WCF, спасибо за ответ. Я считаю, что это самое подходящее решение. – Ashigore

0

Вы можете использовать базу данных SQL для такого использования, как SQL Server или MySQL, и добавить тонкий слой серверного приложения (например, простое приложение ASP.net Данные XML/JSON) и скрипты/приложения, непрерывно запрашивающие сервер.

+0

Спасибо за это, я должен был указать, что я хотел бы избежать использования решения для базы данных, если можно. Объем информации очень мал, и я не хотел добавлять SQL в качестве реквизита, если бы мог сойти с рук. – Ashigore

+0

Я понимаю, что даже для небольших проектов со многими клиентами SQL (или некоторые NoSQL) базы данных дают вам атомную синхронизацию для параллельных запросов из коробки, что приятно. –

-1

Базы данных WCF и SQL - оба решения, которые стоит рассмотреть, но IMHO, что вы описываете, более тесно связано с remote procedure calling (RPC). RPC позволяет создать единый объект на сервере, с которым клиенты могут взаимодействовать, как если бы это был локальный объект (так что полностью избегайте необходимости обращаться к сокетам). Кроме того, каждый клиент может также создать свой собственный уникальный серверный объект для взаимодействия.

Полную реализацию RPC можно найти в сетевой библиотеке networkcomms.net. Следующий фрагмент кода взят из примера RPC.

стороне сервера:

//Register a single object server side called "Calculator" 
RemoteProcedureCalls.Server.RegisterInstanceForPublicRemoteCall<MathClass, IMath>(new MathClass(), "Calculator"); 

Клиент сторона:

//Get a reference to the remote object named "Calculator" 
IMath calc = RemoteProcedureCalls.Client.CreateProxyToPublicNamedInstance<IMath>(connection, "Calculator", out instanceId); 
//We can now use the calculator object as if it were local 
//The following WriteLine outputs '12' where the calculation was performed on the server 
Console.WriteLine(calc.Multiply(4, 3)); 

Отказ от ответственности: Я разработчик для этой библиотеки.

+0

Большое спасибо за ваш подробный ответ. Ваша библиотека, безусловно, выглядит впечатляюще, и функциональность RPC, безусловно, будет делать то, что мне нужно, однако я не могу гарантировать, что в будущем я буду в состоянии выполнить лицензирование GPL продукта, поэтому сначала рассмотрю решение на основе WCF. Но спасибо. – Ashigore

+0

@Ashigore - Если вы когда-нибудь доберетесь до этого момента, также доступны лицензии не GPL, http://www.networkcomms.net/licensing/. – MarcF

+0

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

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

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