Я создал проект библиотеки служб 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 ..
Я нахожу это все запутанным ... У меня нет класса пациентов на панели инструментов на стороне клиента, кроме того, который я получил через ссылку на службу. Так что это значит? И почему это вдруг проявляется? Помните: я даже ничего не менял!
Решение этой проблемы было найдено здесь , но без объяснения того, что это означает. Так; в разделе «Настроить ссылку на службу» снимаю флажок «Повторное использование типов в сборках, на которые есть ссылки». Пересборка теперь все работает нормально без проблем. Но что я действительно изменил? Повлияет ли это на мою заявку? А когда снимать галочку? Я хочу повторно использовать типы, для которых настроил DataContract, но не более того. Смогу ли я получить доступ к тем без этой отметки?