Замена TCP/IP передает по каналу с WCF

Таким образом, в настоящее время моя компания использует соединение TCP/IP для разговора между сервером и клиентскими программами, прямо сейчас мы создаем это соединение с помощью Системы. RunTime. Дистанционная работа, которая является неуклюжей и не настолько надежной. Это было создано приблизительно 5 лет назад, и модель продолжает снова использоваться, и это начинает распространять некоторые проблемы, порты используемые, отказанные соединения, и т.д.

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

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

спасибо!

1
задан John Sheehan 13 June 2010 в 17:50
поделиться

2 ответа

Микаэль уже затронул большинство важных моментов в своем посте - выберите netTcpBinding, который довольно быстрый, отлично работает в локальной сети и имеет все необходимые функции.

Основным отличием будет изменение в мышлении: в remoting вы, по сути, работаете с "удаленными объектами" - вы более или менее удаленно управляете существующими объектами .NET на другой машине.

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

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

Важная часть: это система на основе сообщений - помимо контрактов (интерфейс сервиса и структуры данных, выраженные в XML-схеме), у вас нет связи во время выполнения между двумя сторонами.

Что также означает: нет никакого способа для сервера "вернуться" к клиенту и выяснить что-то или запросить дополнительную информацию. Все, с чем служба должна работать, это сообщение и любые потенциальные заголовки сообщения, которые вы (или среда выполнения WCF) могли бы послать вместе с ним. Вот и все.

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

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

2
ответ дан 2 September 2019 в 23:47
поделиться

Есть старая, но хорошая статья под названием « Миграция .NET Remoting в WCF (и даже ASMX!) », на которую вам стоит обратить внимание.

Я сам много использовал удаленный доступ, и в закрытых помещениях я все еще думаю, что ему есть место. Особенно, когда важна скорость. (Я должен несколько не согласиться с тем, что удаленное взаимодействие ненадежно. Для связи по локальной сети у меня вообще не было проблем.)

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

Следует отметить, что создание событий через WCF требует больше усилий, чем над удаленным взаимодействием, но это небольшая цена. Как только вы познакомитесь с WCF и узнаете, как его оптимально настроить для вашего конкретного сценария, вы больше не вернетесь. Он намного более гибкий, чем удаленное управление, и может использоваться на больших расстояниях, в чем удаленное управление не слишком хорошо (по моему опыту).

Обязательно выберите транспортный канал в WCF для ваших нужд, например tcp, named pipe или soap.

0
ответ дан 2 September 2019 в 23:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: