2008-09-25 27 views
7

Chúng tôi đã sử dụng dịch vụ web của bên thứ ba và đang cố gắng gọi nó từ ứng dụng web ASP.NET. Tuy nhiên khi tôi khởi tạo dịch vụ web, ngoại lệ System.InvalidOperationException sau được ném:Phương thức 'XYZ' không thể được phản ánh

Phương thức 'ABC.XYZ' không thể phản ánh. System.InvalidOperationException: Phương pháp 'ABC.XYZ' không thể được phản ánh. ---> System.InvalidOperationException: Phần tử XML 'MyDoc' từ không gian tên 'http://mysoftware.com/ns' tham chiếu phương thức và loại. Thay đổi tên tin nhắn của phương thức bằng cách sử dụng WebMethodAttribute hoặc thay đổi thành phần gốc của loại bằng cách sử dụng XmlRootAttribute.

Từ những gì tôi có thể thu thập dường như có sự mơ hồ giữa phương pháp và loại trong dịch vụ web. Bất cứ ai có thể làm rõ nguyên nhân có thể có của ngoại lệ này và có bất cứ điều gì tôi có thể làm để khắc phục điều này hay tôi chỉ cần đi đến các chủ sở hữu dịch vụ web để sửa chữa?

Chỉnh sửa: Visual Studio 2008 đã tạo lớp proxy. Thật không may tôi không thể cung cấp một liên kết đến wsdl vì nó là một dịch vụ web cho một ứng dụng bên thrid được cài đặt cục bộ.

Trả lời

3

Có vẻ như vấn đề là xuống đến các vấn đề kiểu dữ liệu giữa VS và các dịch vụ web được viết bằng Java .

Cuối cùng nó đã được sửa bằng cách chỉnh sửa thủ công các tệp lớp và lược đồ đã được tạo bởi VS.

+0

Bạn đã đánh dấu phần này là câu trả lời nhưng thực sự quên đề cập đến cách bạn giải quyết nó? – AaA

+2

@BobSort xin lỗi, cách đây rất lâu để nhớ chính xác những gì tôi đã làm, nhưng nó sẽ có dọc theo dòng cập nhật bằng tay các lớp proxy mà VS đã tạo để truy cập dịch vụ để sử dụng các kiểu dữ liệu mà nó đang mong đợi. –

+0

Thực ra tôi cũng đã sửa được nó, có một lớp thuộc tính được tạo với cùng tên với phương thức webservice. Tôi đã đổi tên lớp và nó đã sửa đổi – AaA

1

Tôi đoán wsdl được phát ra bởi hoặc được cung cấp cùng với dịch vụ không ở dạng wsdl.exe hoặc serviceutil có thể hiểu - bạn có thể đăng wsdl hoặc liên kết tới nó không?

cách bạn tạo các lớp proxy?

Ngoài ra, bạn có thể muốn thử và xác thực wsdl dựa trên giản đồ wsdl để kiểm tra hợp lệ

2

của nó tôi đã đi qua cùng một vấn đề chính xác khi tôi đã tiêu thụ một dịch vụ web của bên thứ 3. Vấn đề trong trường hợp này là thuộc tính mustUndertand trong tệp tham chiếu đang tìm kiếm một Boolean, theo đó thuộc tính không gian tên tìm kiếm một chuỗi.

Bằng cách xem qua tham chiếu, tôi có thể idenitfy thuộc tính vi phạm và chỉ cần thêm "ghi đè" vào chữ ký phương thức.

Không lý tưởng vì bất cứ khi nào bạn cập nhật dịch vụ, bạn phải thực hiện việc này nhưng tôi không thể tìm thấy bất kỳ cách nào khác xung quanh việc này.

Để tìm các tập tin tài liệu tham khảo chọn "tất cả các file" từ cửa sổ solution explorer

Hope this helps

0

Tôi nhận được thông báo tương tự nhưng lỗi của tôi là do System.Runtime.Serialization.dll thiếu do tôi cố gắng chạy một ứng dụng 3.5 trên máy chỉ có cài đặt .NET 2.0.

13

Tôi đã gặp phải vấn đề tương tự vào đầu ngày hôm nay. Lý do là - lớp được tạo ra bởi Visual Studio và được truyền như một tham số vào một trong các phương thức không có một hàm tạo parameterless mặc định. Khi tôi đã thêm nó, lỗi đã biến mất.

+0

Bạn đã tiết kiệm cho tôi giờ ,,,, – PhillyNJ

+0

Và số dư đã được khôi phục - Tôi mất 5 giờ trước khi tìm bài đăng này – Braydie

1

Trong trường hợp của tôi, tôi nhận được lỗi "phương pháp không thể phản ánh" do thực tế rằng trong lớp được trả về bằng phương pháp, tôi đã không hiển thị một hàm tạo tham số mặc định.

Tôi đã làm việc trong VB.NET. Trong lớp trả về của tôi, tôi đã khai báo một phương thức "New (..)" lấy một vài tham số (vì đó là cách tôi muốn sử dụng nó trong mã của tôi). Nhưng bằng cách làm như vậy, tôi đã đè nén hàm tạo mới (ẩn) không cần thiết() ẩn mà VB thêm vào phía sau hậu trường. Rõ ràng trình xử lý dịch vụ web yêu cầu có một hàm tạo tham số không có sẵn. Ngay sau khi tôi thêm trở lại vào lớp của tôi một constructor New() không có tham số, tất cả đều hoạt động tốt.

0

Tôi gặp vấn đề tương tự nhưng tôi thấy rằng một trong các thông số WebMethod có thành viên thuộc loại interface đó là lý do tại sao VS không thể nối tiếp nó. đây là ngoại lệ khi cố gắng tải file disco

System.InvalidOperationException: Không thể serialize thành viên 'Leopard.JobDespatchParameters.SendingUser' của loại 'Leopard.Interfaces.IUser', xem ngoại lệ bên trong để biết thêm chi tiết . ---> System.NotSupportedException: Không thể tuần tự hóa thành viên Leopard.JobDespatchParameters.SendingUser thuộc loại Leopard.Interfaces.IUser vì nó là một giao diện.

0

Chủ đề cũ nhưng tôi gặp sự cố khác, Có thể giúp đỡ người khác. các dll được tham chiếu được trộn lẫn giữa hai phiên bản trên lớp dữ liệu và lớp dịch vụ gây ra sự cố.

0

Một trường hợp khác mà lỗi này có thể xảy ra: Tôi chỉ đơn giản có một phương thức web khác có cùng tên (nhưng các thông số khác nhau) trong dịch vụ web của tôi bị trượt trong khi hợp nhất mã. Sau khi tôi xóa phương pháp cũ, nó hoạt động.

Các vấn đề liên quan