Как создаются серверные приложения, как осуществляется связь клиент-сервер? - PullRequest
0 голосов
/ 26 января 2010

Я хотел бы иметь клиент-серверное приложение, написанное на .NET, которое будет выполнять следующее:

  • сервер работает под управлением Linux
  • на сервере имеется база данных SQL (mySQL), содержащая URL-адреса документов

Что мы хотим: - серверная сторона будет регулярно сканировать все URL-адреса и создавать для них полнотекстовый индекс - клиентская сторона сможет выполнить запрос к этому индексу, используя GUI

Клиентское приложение написано на .NET с использованием C #. Помимо поиска в документах, он сможет делать много других вещей, которые здесь не описаны и которые очень хорошо выполняются на стороне клиента.

Мы хотели бы также использовать C # для серверной части, но у нас нет опыта в этой области. Как обычно делают такие вещи?


Уточняющий вопрос теперь основан на некоторых ответах:

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

Ответы [ 5 ]

1 голос
/ 26 января 2010

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

В настоящее время популярным выбором в этом виде связи являются веб-сервисы. Это позволяет вам делать удаленные вызовы, используя протокол HTTP и кодируя запросы и ответы в XML. Несмотря на то, что у этого метода есть свои критики, я нашел его невероятно простым в настройке и работает почти для всех приложений.

.NET Framework имеет встроенную поддержку веб-сервисов, которые могут определенно вызываться вашим клиентом. Краткий взгляд на веб-сайт mono показывает, что он также поддерживает веб-сервисы, поэтому написание вашего сервера на C # и запуск под моно должен подойти. Поиск в Google по «Учебнику по веб-сервису C #» показывает множество сайтов, на которых есть информация о том, как начать работу. Вот случайный выбор из этих результатов:

http://www.codeguru.com/Csharp/Csharp/cs_webservices/tutorials/article.php/c5477

1 голос
/ 26 января 2010

Для использования c # в Linux вам нужно будет использовать Mono . Это реализация спецификации CLR с открытым исходным кодом.

Затем вам нужно решить, как установить связь между сервером и клиентом, начиная с самого низкого уровня: просто открыть сокет TCP / IP и отправлять биты вверх и вниз, до .Net remoting, до WCF, чтобы показать веб-сервисы на сервере. , Я не знаю, как завершена реализация WCF на моно, также я думаю, что у вас может быть проблема с бинарным удаленным взаимодействием между моно и MS .Net.

Я бы посоветовал веб-сервисам в стиле RPC предложить очень хорошее решение. У WebServices также есть преимущество, позволяющее клиентам с других платформ легко подключаться.

EDIT В ответ на уточнение вопроса. Я бы предложил использовать mono / ASP.NET / WebServices на сервере, если вы хотите использовать c # как на сервере, так и на клиенте.

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

Mono позволяет запускать c # (скомпилированный в IL) на Linux-боксе. Mono ASP.NET позволяет вам использовать стандартный ASP.NET и интегрироваться в Apache, см. http://www.mono -project.com / ASP.NET , и, наконец, WebServices позволяет вам надежно общаться между собой строго типизированным способом. клиент и ваш сервер.

Использование этого подхода сводит на нет большинство вопросов, поднятых в вашем разъяснении, и делает их проблемой кого-то другого.
Сокеты / SSL - это стандартная среда выполнения .Net на клиенте и Apache на сервере.
IP-адрес / порты / прохождение NAT - Все позаботилось. DNS look up получит IP сервера. Открытый сокет позволит серверу отвечать через любой брандмауэр и настройку NAT.
Несколько клиентов - Apache создан для обработки нескольких клиентов одновременно с ASP.NET, поэтому у вас не должно возникнуть никаких проблем.

0 голосов
/ 26 января 2010

Это Базовое клиентское / серверное приложение чата в C # выглядит как своего рода пример, который может стать отправной точкой для меня. Соответствующие классы .NET: TcpClient и TcpListener

0 голосов
/ 26 января 2010

Другой подход: используйте модуль Mod_AspDotNet для Apache, как описано здесь .

0 голосов
/ 26 января 2010

взгляните на Кузнечик : «С Grasshopper вы можете использовать вашу любимую среду разработки от Microsoft® для развертывания приложений на платформах с поддержкой Java, таких как Linux» *

Или см. здесь

Идея состоит в том, чтобы преобразовать ваше приложение в Java и затем запустить его на Tomcat или JBoss.

...