Tôi đã tạo một dự án thư viện dịch vụ WCF trong giải pháp của mình và có các tham chiếu dịch vụ đến điều này. Tôi sử dụng các dịch vụ từ thư viện lớp, vì vậy tôi có các tham chiếu từ dự án ứng dụng WPF của mình ngoài thư viện lớp. Dịch vụ được thiết lập ngay lập tức - chỉ được thay đổi để có được các chức năng dịch vụ không đồng bộ.
Mọi thứ đều hoạt động tốt - cho đến khi tôi muốn cập nhật các tham chiếu dịch vụ của mình. Nó không thành công, vì vậy cuối cùng tôi đã quay lại và thử lại, nhưng nó vẫn thất bại ngay cả sau đó! Vì vậy - cập nhật các tham chiếu dịch vụ không thành công mà không thực hiện bất kỳ thay đổi nào đối với nó. Tại sao?!
Lỗi tôi nhận được là lỗi này:
Custom tool error: Failed to generate code for the service reference
'MyServiceReference'. Please check other error and warning messages for details.
Cảnh báo cung cấp thêm thông tin:
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']
Cũng có hai cảnh báo tương tự nói:
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']
Và tương tự đối với:
Custom tool warning: Cannot import wsdl:port ..
Tôi thấy điều này thật khó hiểu .. Tôi không có lớp Bệnh nhân trên Trang tổng quan phía máy khách ngoại trừ lớp mà tôi nhận được thông qua tham chiếu dịch vụ. Vì vậy, nó có nghĩa gì? Và tại sao nó đột nhiên hiển thị? Hãy nhớ rằng: Tôi thậm chí không thay đổi bất cứ điều gì!
Bây giờ, giải pháp cho điều này đã được tìm thấy ở đây , nhưng không có lời giải thích cho điều này có nghĩa là gì. Vì thế; trong hộp kiểm "Định cấu hình tham chiếu dịch vụ" cho dịch vụ, tôi bỏ chọn hộp kiểm "Sử dụng lại các kiểu trong hội đồng tham chiếu". Xây dựng lại bây giờ tất cả hoạt động tốt mà không có vấn đề. Nhưng tôi đã thực sự thay đổi điều gì? Điều này có ảnh hưởng đến ứng dụng của tôi không? Và khi nào người ta nên bỏ chọn điều này? Tôi muốn sử dụng lại các loại mà tôi đã thiết lập DataContract trên, nhưng không sử dụng nữa. Tôi vẫn có quyền truy cập vào những người mà không có kiểm tra này?