Каковы преимущества миграции нашего приложения на WCF по сравнению с продолжением использования .NET Remoting?

Хорошо, я задал несколько вопросов на StackOverflow о .NET Remoting, и всегда есть хотя бы один человек, которому просто нужно вмешаться: «.NET Remoting устарел, используйте вместо этого WCF». Я понимаю, что он устарел, и нет никаких гарантий, что в будущем он будет поддерживать новые версии .NET Framework. Но каковы еще веские причины, по которым мы хотели бы перейти на WCF? Я видел несколько в основном незначительных неудобств, связанных с .NET Remoting, однако этого недостаточно, чтобы изменить умы сильных мира сего, которые твердо верят в «если он не сломан, не чините его». В настоящее время единственная причина, по которой такое отношение изменится, - это удаление .NET Remoting из будущей версии .NET Framework, так что кто знает, как долго это продлится?

Есть ли у кого-нибудь представление о том, почему именно WCF «лучше», чем .NET Remoting, или почему Remoting уступает WCF? Каковы плюсы и минусы каждой технологии? Есть ли дополнительные возможности, которые вы можете делать с WCF, а не с удаленным взаимодействием?

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

Заранее благодарим за то, что помогли пролить свет на это.


person Bender the Greatest    schedule 28.09.2012    source источник


Ответы (4)


Есть множество причин отказаться от удаленного взаимодействия; некоторые из них могут включать:

  • отсутствие транспортной гибкости
  • требования к версиям - огромная боль
  • зависит от платформы (нет заметных шансов на кроссплатформенное использование)
  • нет шансов на использование на растущем мобильном рынке
  • отсутствие будущего развития: какую бы функцию вы ни добавили - ее не будет

однако я бы не согласился с тем, что WCF является автоматической заменой; WCF сам по себе является довольно универсальным инструментом, но может быть довольно сложным и иметь собственные ограничения. Я сам не использовал его, но видел множество похвал за Сервисный стек, по сути, пользователи описывают это как «WCF сделано правильно», то есть хорошие части WCF, без проблем. Однако есть и другие варианты. Тем не менее, одна хорошая вещь в идее Service Stack заключается в том, что он выполняет итерацию довольно быстро, и если в нем чего-то не хватает, вы можете это изменить.

person Marc Gravell    schedule 28.09.2012
comment
Сервисный стек определенно вызывает у меня интерес, мне придется изучить его более подробно, когда у меня появится дополнительное время. Он должен был бы работать вместе с .NET Remoting для устаревшего клиентского доступа, так что пока он может это делать, я думаю, что могу в этом покопаться. Мне также сказали, что клиент .NET Remoting можно настроить для подключения к службе WCF. Я слышал, что .NET Remoting и WCF работают бок о бок, но мне не удалось подтвердить, может ли клиент Remoting взаимодействовать с WCF. Это правда? Если это так, было бы интересно узнать, поддерживает ли это также Service Stack. - person Bender the Greatest; 28.09.2012

.NET Remoting теперь является устаревшей технологией, цитируемой из MSDN:

Этот раздел относится к устаревшей технологии, которая сохраняется для обратной совместимости с существующими приложениями и не рекомендуется для новой разработки. Распределенные приложения теперь следует разрабатывать с использованием Windows Communication Foundation (WCF).

А вот сравнение производительности WCF и .NET Remoting, проведенное в 2007 году: http://msdn.microsoft.com/en-us/library/bb310550.aspx

Подводя итог, можно сказать, что WCF на 25–50% быстрее, чем веб-службы ASP.NET, и примерно на 25% быстрее, чем .NET Remoting. .

Поэтому я думаю, что скорость - хорошая причина отказаться от .NET Remoting.

person Stefan P.    schedule 28.09.2012
comment
Первое, о чем вы спрашиваете, говорит тот, кто задает вопрос: я понимаю, что он устарел, и нет никаких гарантий поддержки новых версий .NET Framework в будущем. Тем не менее, ваша ссылка на производительность хороша. - person AakashM; 28.09.2012
comment
Очень интересно. Я слышал, что WCF быстрее, чем .NET Remoting, но на 25% это немного быстрее, чем я думал. - person Bender the Greatest; 28.09.2012

Хотя приведенные причины, вероятно, являются соображениями вождения, есть и другие нетривиальные причины:

  • Транспортная независимость
  • Инструменты IDE
  • Легкость тестирования
  • Ремонтопригодность

Когда вы используете WCF, вы можете изменить транспорт, просто отредактировав файл конфигурации. Это может быть очень удобно, когда какой-то ханжеский системный администратор не открывает порт, и вам нужно использовать HTTP на порту 80, чтобы пройти через корпоративный брандмауэр.

Инструменты WCF в Visual Studio феноменальны. Самое сложное - выяснить, какой URL вам нужен. После этого просто наведите указатель мыши и щелкните для генерации кода. Есть одна или две ошибки с сериализацией коллекций, но в целом, если вы скажете обоим сторонам использовать массивы, это будет просто работать. Если вам нужна коллекция в месте назначения, вы всегда можете построить ее вокруг полученного массива, и, поскольку LINQ будет успешно работать с массивами, вы можете добавить ее в другие преобразования.

Я не уверен, что Стефан П. подразумевает под болевыми точками. Редактировать конфигурацию может быть сложно, но Microsoft предоставляет отличный инструмент с графическим интерфейсом, который устраняет все догадки, предоставляя полное дерево опций, но при этом генерируя разреженный файл конфигурации.

Службы WCF легко тестировать, потому что у них есть опубликованный интерфейс, к которому можно подключить тестовую оснастку. Это больше достоинство SoA в целом, чем WCF в частности, но все же желательно.

WCF значительно упрощает мой код, поскольку ни приложение, ни служба не загрязнены кодом «маршрутизации» (чтобы определить, что должно обрабатывать содержимое сообщения); это похоже на вызовы или реализации простых методов. Я в основном использую WCF в качестве оболочки для MSMQ, и единственное видимое следствие выбора транспорта состоит в том, что все эти вызовы методов должны быть недействительными функциями, потому что это транспорт OneWay. Но это неудивительно, если речь идет о постоянной очереди.

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

Кроме того, существует возможность взаимодействия с несовместимыми платформами. В этом случае я думаю об использовании HTTP / XML или HTTP / JSON для обслуживания веб-приложений, написанных (например) на PHP.

Идти другим путем не так-то просто, но довольно просто.

person Peter Wone    schedule 03.10.2012
comment
Что ж, вы можете просто изменить файл конфигурации в .NET Remoting, чтобы изменить транспорт, по крайней мере, так, как мы настроили наше приложение. Я полагаю, что одна из вещей, которые мне нравятся в .NET Remoting, - это то, что с ним довольно просто работать, WCF немного сложнее, а также является излишним для нашего приложения, которое представляет собой простой вызов удаленного метода и посмотреть, какой код возврата. - person Bender the Greatest; 03.10.2012
comment
Думаю, дело в знакомстве. Для меня настройка WCF для простого вызова удаленного метода - это пара минут наведи и щелкни. У меня сложилось четкое впечатление, что я совершенно не смог продать это как улучшение вашей текущей ситуации. - person Peter Wone; 05.10.2012

Я даю очки WCF за ведение журнала и безопасность.

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

Безопасность. Механизм безопасности в WCF довольно прост и нестандартен, если смотреть с точки зрения разработчиков, но он очень надежен и очень безопасен. Самое приятное то, что для часто используемых и рекомендуемых привязок WCF обеспечивает безопасность по умолчанию, которую можно доверять ядру. Безопасность сообщений на WSHTTPbinding является примером в этих строках.

Удаленное взаимодействие .NET Framework по умолчанию не выполняет проверку подлинности или шифрование. Поэтому рекомендуется предпринять все необходимые шаги, чтобы удостовериться в идентичности клиентов или серверов, прежде чем взаимодействовать с ними удаленно.

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

person Narinder Bhullar    schedule 28.09.2012