Я собираюсь предложить альтернативу тому, что вы пытаетесь сделать:
Вместо того, чтобы переделывать свой код, чтобы вы передавали свой класс MyProject.Something.Foo через веб-сервис, я предлагаю НЕ делать этого. И вот почему:
Используя класс MyProject.Something.Foo в контракте на обслуживание, вы тесно связываете класс с вашим веб-сервисом и, следовательно, также связываете клиентов вашего веб-сервиса, которые должны будут генерировать свои собственные прокси на стороне клиента (или эквивалент). Эта связь затрудняет вам изменение реализации логики, скрытой за вашим контрактом на обслуживание в будущем, потому что, если вы сделаете изменение, которое включает в себя изменение открытого интерфейса класса, вам придется заново сгенерировать прокси-серверы и изменить Контракт опубликован вашим веб-сервисом. Как и все ваши клиенты.
Вместо этого я предлагаю вам сгенерировать прокси с помощью svcutil; сохраняйте класс MyProject.Something.Foo (который является вашим слоем Business Logic) отдельным; и написать немного кода для сопоставления между ними. В этом случае вы с большей вероятностью сможете воспринимать изменения в своем классе бизнес-логики, не нарушая и не создавая заново контракт на обслуживание.
То, к чему я (не очень красноречиво, прочитав это обратно) пытаюсь добраться, - это принцип разработки SOA, известный как «Схема общего доступа к службам и контракт, а не класс» - дайте этому Google и посмотрите, что вы думаете.
Надеюсь, это полезно!