Самый простой способ модернизировать протокол связи в корпоративном приложении WCF

В нашем корпоративном настольном приложении мы активно используем WCF с 2010 по 2011 год, и нам это очень нравится.
Однако мы видим, что WCF становится все менее популярным, он не поддерживается в.NET Core, который рано или поздно заменит.NET Framework, поэтому мы начали задумываться о замене WCF в нашем приложении.
Мы хотим заменить протокол связи, но не хотим переписывать все существующие сервисы. У нас есть расширения для нашего продукта, написанные нашими партнерами, поэтому всем им нужно будет переписать все свои услуги, это займет огромное количество времени. Пока мы не против переписать инфраструктуру регистрации сервисов, запуска, звонка и тд...
Основные функции WCF, которые мы используем и которые мы определенно хотим иметь в будущем:
- разделение контрактов между клиентом и сервером - мы контролируем как клиентскую, так и серверную часть нашего приложения, и они оба написаны на C#, поэтому я считаю, что для нас наличие контрактов является преимуществом
- вызыватели операции: мы используем их, чтобы добавить ведение журнала для каждого вызова WCF, обернуть вызовы в транзакции, изменить культуру потока и т. д.

Есть ли способ написать своего рода обертку вокруг существующих сервисов, контрактов на передачу данных и сервисных контрактов, чтобы иметь возможность вызывать их так же, как сейчас, но использовать другой современный протокол обмена данными: gRPC, Web API, так далее.?

1 ответ

Я исследовал похожие "обтекания" вокруг идей для существующих служб WCF, которые работают над базовыми HTTP-привязками, как старые добрые веб-службы SOAP.

Кажется, что нет никакого способа изменить протокол на что-то более современное (например, веб-API на основе gRPC или JSON) без существенной переписывания базовых кодов. Например, хотя вы можете переключить привязку WCF на WebHttpBinding и свои контракты на операции / данные, чтобы ваши службы вели себя как более современные API-интерфейсы RESTful, вероятно, было бы более целесообразно в любом случае просто перенести текущие коды на ASP.Net MVC.

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

Другие вопросы по тегам