Çözümümde bir WCF hizmet kitaplığı projesi oluşturdum ve buna hizmet referanslarım var. Hizmetleri bir sınıf kitaplığından kullanıyorum, bu nedenle sınıf kitaplığına ek olarak WPF uygulama projemden de referanslarım var. Hizmetler doğrudan kurulur - yalnızca eşzamansız hizmet işlevlerini almak için değiştirilir.
Hizmet referanslarımı güncellemek isteyene kadar her şey yolunda gidiyordu. Başarısız oldu, bu yüzden sonunda geri döndüm ve yeniden denedim, ancak o zaman bile başarısız oldu! Bu nedenle, herhangi bir değişiklik yapılmadan servis referanslarının güncellenmesi başarısız olur. Neden?!
Aldığım hata şudur:
Custom tool error: Failed to generate code for the service reference
'MyServiceReference'. Please check other error and warning messages for details.
Uyarı daha fazla bilgi verir:
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']
Aynı şekilde iki benzer uyarı da var:
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']
Ve aynısı:
Custom tool warning: Cannot import wsdl:port ..
Tüm bunları kafa karıştırıcı buluyorum .. Müşteri tarafındaki Dashboard'da, servis referansından aldığım dışında bir Hasta sınıfım yok. Yani bunun anlamı nedir? Ve neden birdenbire ortaya çıkıyor? Unutma: Ben hiçbir şeyi değiştirmedim!
Şimdi, bunun çözümü burada bulundu , ancak bunun ne anlama geldiğine dair bir açıklama yapılmadı. Yani; Servis için "Servis referansını yapılandır" kısmında "Referans verilen derlemelerde yeniden kullanım tipleri" onay kutusunun işaretini kaldırıyorum. Şimdi yeniden inşa etmek sorunsuz çalışıyor. Ama ben gerçekten neyi değiştirdim? Bu, başvurumu etkileyecek mi? Ve bunun işareti ne zaman kaldırılmalı? DataContract'i kurduğum türleri yeniden kullanmak istiyorum, ancak daha fazlasını istemiyorum. Bu işaretlenmemiş olanlara yine de erişebilecek miyim?