Lỗi tham chiếu dịch vụ: Không thể tạo mã cho tham chiếu dịch vụ


131

Tôi có một Giải pháp dịch vụ Windows và đang cố gắng thêm một tham chiếu dịch vụ vào Dịch vụ web Hermes (Opensource ebms) trong VS2010.

Tôi có thể tìm thấy Dịch vụ web bằng URL của nó, nhưng khi tôi thử và điền vào tham chiếu Dịch vụ, tôi gặp các lỗi sau trong Visual Studio:

Error 8 Custom tool error: Failed to generate code for the service reference 'testService'.  Please check other error and warning messages for details. C:\Users\Admin\documents\visual studio 2010\Projects\MyProject\MyProject.MessageHandler\Service References\testService\Reference.svcmap 1 1 MyProject.MessageHandler


Warning 6 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://service.ebms.edi.cecid.hku.hk/']/wsdl:portType[@name='EbmsStatusQuery']
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://service.ebms.edi.cecid.hku.hk/']/wsdl:binding[@name='EbmsSoapHttpStatusQuery'] C:\Users\Admin\documents\visual studio 2010\Projects\MyProject\MyProject.MessageHandler\Service References\testService\Reference.svcmap 1 1 MyProject.MessageHandler

Warning 7 Custom tool warning: Cannot import wsdl:port
Detail: There was an error importing a wsdl:binding that the wsdl:port is dependent on.
XPath to wsdl:binding: //wsdl:definitions[@targetNamespace='http://service.ebms.edi.cecid.hku.hk/']/wsdl:binding[@name='EbmsSoapHttpStatusQuery']
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://service.ebms.edi.cecid.hku.hk/']/wsdl:service[@name='EbmsMessageStatusQuery']/wsdl:port[@name='EbmsStatusQuery'] C:\Users\Admin\documents\visual studio 2010\Projects\MyProject\MyProject.MessageHandler\Service References\testService\Reference.svcmap 1 1 MyProject.MessageHandler

Warning 5 Custom tool warning: Cannot import wsdl:portType
Detail: An exception was thrown while running a WSDL import extension: System.ServiceModel.Description.XmlSerializerMessageContractImporter
Error: Schema with target namespace 'http://service.ebms.edi.cecid.hku.hk/' could not be found.
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://service.ebms.edi.cecid.hku.hk/']/wsdl:portType[@name='EbmsStatusQuery'] C:\Users\Admin\documents\visual studio 2010\Projects\MyProject\MyProject.MessageHandler\Service References\testService\Reference.svcmap 1 1 MyProject.MessageHandler

Một số điều tra dường như cho thấy đó là do svcutil.exe không thể xây dựng các proxy do không có quyền đối với một thư mục (có thể là c: \ windows \ temp). Tôi đã thử gán các quyền truy cập khác nhau, nhưng tôi không thực sự chắc chắn người dùng nào cần quyền, hoặc nếu đó chỉ là một cá trích đỏ.

bất kì ý kiến ​​nào đều được đánh giá cao.

Cảm ơn

Câu trả lời:


303

Phải bỏ chọn các loại Tái sử dụng trong tất cả các cụm được tham chiếu từ tùy chọn Cấu hình tham chiếu dịch vụ

Kiểm tra điều này để biết chi tiết


3
Ngoài ra, khi "Sử dụng lại các loại trong tập hợp được tham chiếu" thực sự cần thiết, bạn có thể thêm tham chiếu dịch vụ từ dự án Thư viện lớp được tạo riêng cho mục đích đó. Kiểm tra trả lời của tôi để biết thêm thông tin.
Florin Dumitrescu

Tôi muốn có một giải pháp mà không bỏ chọn "các loại sử dụng lại" và tôi đã tìm được một giải pháp hiệu quả, xem câu trả lời của tôi ở đây .
Shahin Dohan

Thay vì làm một cái gì đó như thế này, hãy sử dụng các hội đồng mà khách hàng WCF phụ thuộc thay vì sử dụng tất cả những người được tham chiếu một cách mù quáng, Nó có thể khó và mất nhiều thời gian hơn là bỏ chọn hộp kiểm trong câu hỏi, nhưng tôi thấy giải pháp này phù hợp hơn so với giải pháp đánh dấu là câu trả lời.
Oscar Guillamon

Ngoài ra, hãy đảm bảo Dự án của bạn không chỉ đọc .. Đây là vấn đề của tôi ..
arihanth jain

126

Nhấp chuột phải vào tham chiếu dịch vụ của bạn và chọn Configure Service Reference...

Cấu hình tham chiếu dịch vụ

Sau đó bỏ chọn Reuse types in referenced assemblies

Các loại tái sử dụng

Nhấp OK, làm sạch và xây dựng lại giải pháp của bạn.


2
Điều gì xảy ra nếu tôi cần sử dụng lại các hội đồng tham chiếu? Tôi có một dự án và hộp kiểm đó được kiểm tra. Cập nhật hoạt động trong máy của tôi, nhưng trên máy của đồng nghiệp, nó không ... có manh mối nào không?
Ricardo Appleton

Điều này xảy ra khi tôi nâng cấp từ v4.6.1 lên v4.7 với dự án của mình. Điều này đã sửa nó.
Mike Flynn

17

Tôi cũng gặp phải một lỗi tương tự khi cố gắng tạo ứng dụng khách cho dịch vụ web từ dự án ASP .Net MVC 4.0 bằng Visual Studio 2012.

Căn nguyên của vấn đề dường như là thực tế rằng dự án mà tôi đang cố gắng tạo ra máy khách đang tham chiếu một hội đồng mà phụ thuộc vào một hội đồng khác cũng không được tham chiếu.

Khi "Sử dụng lại các loại trong tập hợp tham chiếu" được bật trong cấu hình dịch vụ, trình tạo dịch vụ có thể đang kiểm tra tất cả các tập hợp được tham chiếu để có danh sách các loại có thể được sử dụng lại. Việc một trong các hội đồng được tham chiếu đang tham chiếu một hội đồng khác không có sẵn có thể là nguyên nhân khiến máy phát bị hỏng.

Bỏ chọn "Sử dụng lại các loại trong các cụm tham chiếu" từ các cấu hình dịch vụ sẽ giải quyết vấn đề trên , nhưng có một tác dụng phụ đối với nó. Tùy chọn loại tái sử dụng là có lý do và trong một số trường hợp, nó tránh được việc truyền không cần thiết trong mã tiêu thụ dịch vụ.

Ví dụ: nếu bản thân dịch vụ được xây dựng bằng WCF và một số tham số phương thức bên trong thuộc loại System.Guid, chúng sẽ được dịch sang các chuỗi trong máy khách được tạo nếu tùy chọn loại sử dụng lại bị tắt.

Một cách khác mà tôi thích vô hiệu hóa các loại sử dụng lại là thêm tham chiếu dịch vụ từ dự án Thư viện lớp được tạo riêng cho mục đích đó. Một điều cần lưu ý là sao chép tất cả các cấu hình liên quan đến dịch vụ từ app.config của thư viện lớp vào tệp cấu hình của dự án khởi động.

Nếu có các kiểu được định nghĩa trong các cụm cục bộ cần được sử dụng lại trong máy khách dịch vụ, thì các cụm đó chỉ cần được tham chiếu từ dự án thư viện lớp đã đề cập ở trên, cùng với tất cả các phụ thuộc của chúng.


Kỳ dị. Tôi đã thay đổi liên kết của mình từ HttpBinding sang NetNamedPipeBinding (cũng đã thêm điểm cuối mex) và trang bị điều này trong hội đồng khách hàng của tôi A. Tôi đã tạo một lớp B libary mới tham chiếu dịch vụ WCF của mình. Sau đó, tôi đã thêm B làm tài liệu tham khảo cho A và kỳ diệu là mọi thứ hoạt động trở lại. Rất lạ. Cảm ơn giải pháp
citronas

3

http://uliasz.com/2011/06/wcf-custom-tool-error-fails-to-generate-code-for-the-service-reference/#comment-1647

Nhờ bài viết trên.

Trong trường hợp của tôi, tôi gặp vấn đề này với dự án WPF của tôi trong VS.Net 2008. Sau khi xem qua bài viết này, tôi nhận ra rằng lắp ráp được sử dụng trong dịch vụ web là phiên bản lắp ráp khác nhau được sử dụng trên máy khách.

Nó chỉ hoạt động tốt sau khi cập nhật lắp ráp trên máy khách.


1

Sẽ rất khó để đoán vấn đề vì đó là do lỗi trong WSDL và không kiểm tra WSDL, tôi không thể bình luận nhiều hơn nữa. Vì vậy, nếu bạn có thể chia sẻ WSDL của mình, vui lòng làm như vậy.

Tất cả những gì tôi có thể nói là dường như có một lược đồ bị thiếu trong WSDL (với không gian tên đích 'http://service.ebms.edi.cecid.hku.hk/'). Tôi biết về các vấn đề và xử lý khác nhau của lược đồ khi bao gồm các hướng dẫn được bỏ qua.

Nói chung, tôi thấy việc triển khai các dịch vụ web của Microsoft khá tốt nên tôi nghĩ rằng dịch vụ web đang gửi lại WSDL tinh ranh.


Cảm ơn Aliostad, tôi sẽ thử và chia sẻ WSDL khi tôi đi làm.
jheppinstall

0

Tôi gặp lỗi tương tự trong Silverlight 5 (VS2012)

Bạn cũng có thể xóa các tham chiếu đến:

  • System.ServiceModel.DomainService.Client
  • System.ServiceModel.DomainService.Client.Web

Sau khi bạn cập nhật các tài liệu tham khảo dịch vụ, hãy nhớ thêm chúng vào.


0

Như đã nêu ở trên, có một vài vấn đề khác nhau có thể xảy ra. Những gì chúng tôi tìm thấy là .DLL cho thư viện WCF đã được thêm làm tài liệu tham khảo cho dự án máy khách. Chính điều này đã tạo ra các vấn đề với việc giải quyết các đối tượng và do đó làm cho các tệp bị "làm trống" bởi các bước tạo mã. Trong khi bỏ chọn việc sử dụng "Loại sử dụng lại ..." có vẻ giống như một câu trả lời, nó tạo ra các định nghĩa bổ sung về các loại đối tượng, là proxy cho các loại thực, trong một không gian tên mới, sau đó gây ra tất cả các loại vấn đề "tương thích" với việc sử dụng các loại. Chỉ khi bạn thực sự muốn "ẩn" một loại, bạn nên kiểm tra tùy chọn này.

Ẩn loại này sẽ phù hợp khi bạn không muốn phụ thuộc loại "DLL" vào "rò rỉ" vào một dự án mà bạn đang cố gắng tách biệt với một dự án khác. Nếu DLL cho dự án thư viện WCF len lỏi vào các tham chiếu dự án máy khách, thì bạn sẽ gặp vấn đề này với tất cả các loại tác dụng phụ lạ vì các định nghĩa kiểu cũng có trong DLL.


0

gặp vấn đề tương tự, được giải quyết bằng cách chạy Visual Studio trong chế độ Quản trị viên


0

Tôi đã gặp phải vấn đề này khi nâng cấp giải pháp VS2010 WCF + Silverlight trong VS2015 Professional . Bên cạnh việc tự động nâng cấp từ Silverlight 4 lên Silverlight 5, giá trị hộp kiểm sử dụng lại tham chiếu dịch vụ đã bị thay đổi và việc tạo không thành công.


0

"Loại tái sử dụng" không phải lúc nào cũng là vấn đề khi lỗi này xảy ra.

Khi thêm một tham chiếu đến một dịch vụ cũ hơn, hãy nhấp vào 'nâng cao' và ở đó 'Thêm tham chiếu web'. Bây giờ liên kết đến wsdl của bạn và mọi thứ sẽ hoạt động.


0

Nếu bạn muốn sửa lỗi này mà không bỏ chọn hộp kiểm tái sử dụng lắp ráp thì đây là cách làm việc với tôi:

  • Xóa hội đồng tham chiếu mà bạn muốn sử dụng lại
  • Xóa tất cả thư mục bin của dự án
  • Cập nhật dịch vụ tham khảo
    • Giữ "Sử dụng lại các loại trong các cụm tham chiếu được chỉ định"
  • Thêm tham chiếu để lắp ráp lại để sửa lỗi
  • Cập nhật lại dịch vụ tham khảo

0

Khởi động lại Visual Studio đã giúp tôi rất nhiều. Tôi đang sử dụng VS 2015.


-1

Tôi gặp vấn đề này khi cố gắng cập nhật tham chiếu dịch vụ của mình (Lỗi chỉ hiển thị khi thêm tham chiếu dịch vụ) nhưng không muốn xóa hộp kiểm sử dụng lại lắp ráp.

Những gì làm việc cho tôi là như sau:

  • Xóa hội đồng tham chiếu mà tôi muốn sử dụng lại
  • Cập nhật dịch vụ tham khảo
  • Giữ "Sử dụng lại các loại trong các cụm tham chiếu được chỉ định"
  • Bỏ qua các lỗi, đó là vì tham chiếu bị thiếu!
  • Thêm tham chiếu để lắp ráp lại để sửa lỗi
  • Cập nhật lại dịch vụ tham khảo

Voila, bây giờ nó thực sự cập nhật và không cố xóa tất cả mã được tạo của tôi nữa.

Tôi gần như đã sẵn sàng để từ bỏ tính năng loại sử dụng lại ...

EDIT: Cũng đảm bảo rằng cấu hình xây dựng là AnyCPU hoặc x86, vì svcutil có lỗi với x64.

Đối với downvoter: Xin lỗi nếu nó không hiệu quả với bạn, tôi thậm chí không biết tại sao nó lại hiệu quả với tôi, nhưng nó đã làm. Tôi có thể đã làm một cái gì đó khác vào thời điểm đó đã khắc phục vấn đề, nhưng không có cách nào để biết bây giờ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.