Полагаю, вы неправильно поняли элементарные идеи веб-сервисов. WCF - это API для создания веб-сервисов. Веб-сервисы, в отличие от RPC, должны использоваться независимо. Это означает, что вы можете создать веб-сервис, не зная приложения, которое будет его использовать (вы можете открыть веб-сервис в Интернете или для делового партнера). Это большая разница для RPC, где клиент и сервис большую часть времени строятся вместе. Исходя из элементарных правил безопасности, сервисные исключения не отправляются клиенту по умолчанию. Вы не хотите раскрывать внутреннюю информацию своим неизвестным клиентам.
На ваши вопросы:
Сервисная ссылка не актуальна: да, это очень важно для управления версиями. Я могу создать новую версию веб-службы и использовать старый код клиента. Если вы создаете клиент и службу и уверены, что новые версии клиента и службы будут всегда развернуты в одно и то же время, вы можете воспользоваться предложением Эндрю.
Тип не может быть сериализован: веб-сервисы используют совместимый формат для обмена данными. Как вы думаете, компилятор должен знать, является ли тип сериализуемым? Должен ли он выполнять сериализацию всех типов данных во время каждой сборки? Как предположил Джон, это можно легко обнаружить с помощью правильной стратегии тестирования.
Служба пытается передать больше данных, чем позволяет клиент. Что вы подразумеваете под этим? Вы имеете в виду, что сервис может передавать дополнительные поля, которые неизвестны клиенту из-за новой версии сервиса? В этом случае вы жалуетесь на одну из самых важных функций управления версиями. Или вы имеете в виду, что сервис может отправить больше сообщения, чем позволяет клиент? В таком случае, как служба должна знать, какой размер разрешен для неизвестного клиента? Размер MaxReceiveMessage является защитой от атаки типа «отказ в обслуживании» и контролируется принимающей стороной. Если вам нужно обрабатывать динамический размер сообщения в вашем сообщении, вы должны его кодировать.
Скрытие ошибок: по умолчанию каждый сервис имеет такую конфигурацию в своем поведении:
<serviceDebug includeExceptionDetailInFault="false" />
Просто измените это значение на истинное. Отслеживание WCF + отслеживание сокетов и Регистрация сообщений WCF , и вы получите лучший диагностический арсенал, который когда-либо был у MS предоставляется в .NET разработчикам .