Как указано в принятом ответе, проблема со ссылкой на тип при повторном использовании типов, вероятно, является причиной. Я обнаружил, что если вы не можете легко определить проблему, то использование командной строки svcutil.exe поможет вам выявить основную проблему (как указывает Джон Сондерс).
В качестве улучшения приведен краткий пример использования svcutil.
svcutil /t:code https://secure.myserver.com/services/MyService.svc /d:test /r:"C:\MyCode\MyAssembly\bin\debug\MyAssembly.dll"
Где:
- / t: код генерирует код по заданному URL-адресу
- / d: указать каталог для вывода
- / r: указать справочную сборку
Полная ссылка на командную строку svcutil здесь: http://msdn.microsoft.com/en-us/library/aa347733.aspx
Как только вы запустите svcutil, вы увидите, что исключение выдается при импорте. Вы можете получить сообщение такого типа об одном из ваших типов: «ссылочный тип не может быть использован, поскольку он не соответствует импортированному DataContract».
Это может быть просто так, как указано в том, что один из типов в ссылочной сборке отличается от того, что было сгенерировано в DataContract для службы. В моем случае служба, которую я импортировал, имела более новые, обновленные типы, чем те, что были у меня в общей сборке. Это было неочевидно, потому что тип, упомянутый в исключении, оказался одинаковым. Отличался один из вложенных сложных типов, используемых этим типом.
Существуют и другие, более сложные сценарии, которые могут вызывать исключения такого типа и приводить к пустым файлам reference.cs. Вот один пример .
Если у вас возникла эта проблема, и вы не используете универсальные типы в контрактах на данные, а также не используете IsReference = true, тогда я рекомендую убедиться, что ваши общие типы точно совпадают на вашем клиенте и сервере. В противном случае вы, скорее всего, столкнетесь с этой проблемой.