Основная причина отделения внутренних бизнес-объектов от контрактов на данные / контрактов на сообщения заключается в том, что вы не хотите, чтобы внутренние изменения в вашем приложении обязательно изменяли контракт на обслуживание. Если вы создаете версионные веб-сервисы (с более чем 1 версией реализованных интерфейсов), то у вас часто есть одна версия бизнес-объектов ваших приложений с более чем 1 версией объекта контракта данных / контракта сообщений.
Кроме того, в сложных ситуациях Enterprise Integration у вас часто есть канонический формат данных (контракты данных и сообщений), который используется несколькими приложениями, что вынуждает каждое приложение отображать канонический формат данных в свою внутреннюю объектную модель.
Если вам нужен инструмент, помогающий разобраться с мелочами, заключающийся в разделении контракта на данные / контракта на сообщения и т. Д., То обратитесь к фабрике программного обеспечения веб-служб Microsoft http://msdn.microsoft.com/en-us/library/cc487895.aspx, в которой есть несколько хороших рецептов для решения проблемы сантехники WCF. *
Что касается исключений, WCF автоматически переносит все исключения в FaultExceptions, которые сериализуются как ошибки проводного формата.
Также возможно генерировать универсальные исключения ошибок, которые позволяют вам указать дополнительные детали, которые будут включены в сериализованную ошибку. Поскольку ошибки, выдаваемые операцией веб-службы, являются частью его контракта, рекомендуется объявить ошибки в объявлении операции:
[FaultContract(typeof(AuthenticationFault))]
[FaultContract(typeof(AuthorizationFault))]
StoreLocationResponse StoreLocation(StoreLocationRequest request);
Оба типа AuthenticationFault и AuthorizationFault представляют дополнительные сведения, которые должны быть сериализованы и отправлены по проводам, и могут быть выданы следующим образом:
throw new FaultException<AuthenticationFault>(new AuthenticationFault());
Если вы хотите больше деталей, тогда кричите; Я так долго живу и дышу этим, я почти зарабатываю на жизнь этим;)