В моем решении я создал проект библиотеки WCF, и у меня есть ссылки на службы. Я использую службы из библиотеки классов, поэтому у меня есть ссылки из моего проекта приложения WPF в дополнение к библиотеке классов. Сервисы настроены прямолинейно - только для получения функций асинхронного обслуживания.
Все работало нормально - пока я не захотел обновить свои ссылки на службы. Это провалилось, поэтому я, в конце концов, откинулся назад и повторил попытку, но это случилось даже тогда! Таким образом - обновление ссылок на службы завершается без каких-либо изменений. Зачем?!
Ошибка, которую я получаю, следующая:
Custom tool error: Failed to generate code for the service reference
'MyServiceReference'. Please check other error and warning messages for details.
Предупреждение дает дополнительную информацию:
Custom tool warning: Cannot import wsdl:portType
Detail: An exception was thrown while running a WSDL import extension:
System.ServiceModel.Description.DataContractSerializerMessageContractImporter
Error: List of referenced types contains more than one type with data contract name 'Patient' in
namespace 'http://schemas.datacontract.org/2004/07/MyApp.Model'. Need to exclude all but one of the
following types. Only matching types can be valid references:
"MyApp.Dashboard.MyServiceReference.Patient, Medski.Dashboard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" (matching)
"MyApp.Model.Patient, MyApp.Model, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" (matching)
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:portType[@name='ISomeService']
Есть два похожих предупреждения:
Custom tool warning: Cannot import wsdl:binding
Detail: There was an error importing a wsdl:portType that the wsdl:binding is dependent on.
XPath to wsdl:portType: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:portType[@name='ISomeService']
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:binding[@name='WSHttpBinding_ISomeService']
И то же самое для:
Custom tool warning: Cannot import wsdl:port ..
Я нахожу это все запутанным. У меня нет класса Patient на панели управления на стороне клиента, кроме той, которую я получил через ссылку на службу. Так что это значит? И почему это неожиданно показывает? Помните: я ничего не изменил!
Теперь решение этого было найдено здесь, но без объяснения того, что это значит. Так; в разделе "Настройка справки службы" для службы снимите флажок "Типы повторного использования в ссылочных сборках". Реконструкция теперь все отлично работает без проблем. Но что я действительно изменил? Это повлияет на мое приложение? И когда следует снять этот флажок? Я хочу повторно использовать типы, которые я создал DataContract, но не более того. Смогу ли я получить доступ к тем, кто не прошел проверку?