Criei um projeto de biblioteca de serviço WCF em minha solução e tenho referências de serviço para isso. Eu uso os serviços de uma biblioteca de classes, portanto, tenho referências do meu projeto de aplicativo WPF, além da biblioteca de classes. Os serviços são configurados diretamente - alterados apenas para obter funções de serviço assíncronas.
Tudo estava funcionando bem - até que eu quis atualizar minhas referências de serviço. Ele falhou, então eu acabei revertendo e tentei novamente, mas falhou mesmo assim! Portanto, a atualização das referências de serviço falha sem fazer nenhuma alteração. Por quê?!
O erro que recebo é este:
Custom tool error: Failed to generate code for the service reference
'MyServiceReference'. Please check other error and warning messages for details.
O aviso fornece mais informações:
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']
Existem dois avisos semelhantes também dizendo:
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']
E o mesmo para:
Custom tool warning: Cannot import wsdl:port ..
Acho tudo isso confuso. Não tenho uma classe Paciente no painel do lado do cliente, exceto aquela que obtive por meio da referência de serviço. Então o que isso significa? E por que aparece de repente? Lembre-se: eu nem mudei nada!
Agora, a solução para isso foi encontrada aqui , mas sem uma explicação para o que isso significa. Então; em "Configurar referência de serviço" para o serviço, desmarco a caixa de seleção "Reutilizar tipos nos assemblies referenciados". Reconstruir agora tudo funciona bem sem problemas. Mas o que eu realmente mudei? Isso afetará meu aplicativo? E quando desmarcar isso? Eu quero reutilizar os tipos em que configurei DataContract, mas não mais. Ainda terei acesso àqueles sem essa verificação?