Простой и надежный C# клиент-сервер используя WCF
WCF - Windows Communication Foundation, программный фреймворк, используемый для обмена данными между приложениями.
Почему стоит использовать это решение, а не сделать свой клиент-сервер ?
1. Данное решение многопоточное. Это значит, что одновременно могут серверу поступить запросы от многих клиентов и клиенты не будут ждать друг друга в очереди, а каждый запрос будет выполнен в отдельном параллельном потоке.
2. Решение не имеет большого объема кода, а значит понять данный код легче.
3. Вам не придется вдаваться в подробности работы между клиентом и сервером: тот самый случай когда установил и забыл о проблемах.
1. Создадим интерфейс ITransferObject
Интерфейс определяет как будет выглядеть объект, в котором будут методы работы нашего клиент-сервера. В WCF данный интерфейс называется контрактом.
Замечание: если Вы создаете клиент-сервер не для теста в рамках одного приложения, а клиент и сервер будут разными приложениями, то Вам следует создать интерфейс ITransferObject и класс TransferObject в отдельной библиотеке dll. В таком случае Ваше клиентское и серверное приложения будут использовать одни классы и интерфейсы, что является Важным условием для WCF.
В данном примере определим, что данный объект будет иметь 2 простых метода:
GetSum - подсчет суммы двух целых чисел
GetMultiPly - подсчет умножения двух целых чисел
[ServiceContract] - необходимый модификатор чтобы указать что данный интерфейс является контрактом WCF службы.
[OperationContract] - необходимый модификатор чтобы указать что данные методы будут использоваться в контракте.
2. Создадим класс TransferObject
Класс TransferObject унаследуем от интерфейса ITransferObject. Данный класс будет иметь простую реализацию наших методов.
При вызове метода GetSum будут переданы 2 целых числа.Ответом выполним сложение этих чисел.
Соответственно и с методом GetMultiPly - ответом выполним перемножение этих чисел.
3. Создадим серверную часть.
serviceAddress - это адрес на котором сервер будет ожидать подключения от клиентов.
serviceName - имя сервиса. На каждом адресе может быть большое количество сервисов. Имя сервиса - часть адреса, по которому клиент подключается к серверу.
Далее происходит запуск серверной части WCF. Чтобы приложение не закрылось после отработки всего кода, добавлено Console.ReadKey() - ожидание нажатия любой клавиши.
4. Создадим клиентскую часть.
Строка подключения к серверу такая же как используется в серверной части: адрес_сервера + имя сервиса.
Далее происходит инициализация клиенской части WCF и вызов методов сложения и умножения чисел.
5. Запуск и проверка клиент-сервера
В первую очередь запускаем серверную часть, затем клиентскую.
6. Выводы:
Сделать простой и надежный клиент-сервер совсем не сложно. Вы описываете какими данными будут обмениваться между собой клиент и сервер, а также реализуете необходимые методы на стороне сервера. И все готово.
Ссылка на код:
Есть один маленький ньюанс. На локальном компьютере подключение работает изумительно, но с переносом на сервер при подключении клиента к серверу выскочит Ошибка вызова SSPI. Это из особенностей пакетов безопасности.
В код клиента и сервера необходимо будет добавить следующие строки.
Для клиента:
clientBinding.Security.Mode = SecurityMode.None;
Для сервера:
serverBinding.Security.Mode = SecurityMode.None;
Фотку для примера прикладываю)
Спасибо тебе добрый человек, теперь у меня всё работает. Только я прописал в конфиге, а не в коде.