Я створив проект бібліотеки служб 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, але не більше. Чи я все одно отримаю доступ до тих, хто не перевірив це?