Если у вас есть проблема со смешанными типами примитивов (таких как string) и MessageContract в качестве другого типа, то есть с одним классом в качестве возвращаемого и строковым параметром, один из способов, которым я решил это, был переход с MessageContract на DataContract.
Другой способ решить эту проблему - создать класс для хранения вашего типа примитива как свойства, чтобы и ваш возврат, и параметр могли реализовать MessageContract.