15

Tôi đang tiêu thụ một wsdl được xác định trước với svcutil a la:Net 4.5 Svcutil tạo ra hai hoạt động có cùng tên (Phương pháp và MethodAsync)

svcutil some_service.wsdl 

một trong những phương pháp được tạo ra có chữ ký sau đây:

[System.ServiceModel.OperationContractAttribute(Action="http://ws.example.org/SubmitData", ReplyAction="*")] 
SubmitDataResponse SubmitData(SubmitDataRequest request) 

trong khi scvutil từ VS2010/.net35 chỉ tạo ra ở trên và VS không có vấn đề lanuching dịch vụ, chương trình svcutil là một phần của VS2012/.net45 cũng tạo ra một phương pháp với chữ ký

[System.ServiceModel.OperationContractAttribute(Action="http://ws.example.org/SubmitData", ReplyAction="*")] 
Task<SubmitDataResponse> SubmitDataAsync(SubmitDataRequest request); 

Điều này gây ra một ngoại lệ thời gian chạy:

System.InvalidOperationException: Không thể có hai hoạt động trong cùng một hợp đồng có cùng tên, phương pháp SubmitDataAsync và SubmitData trong loại MyType vi phạm quy tắc này. Bạn có thể thay đổi tên của một trong các hoạt động bằng cách thay đổi tên phương thức hoặc bằng cách sử dụng thuộc tính Tên của OperationContractAttribute.

Tôi có thể giải quyết vấn đề này bằng cách xóa phương thức được thêm vào Không đồng bộ hoặc chỉ cần sử dụng svcutil từ VS2010. Nhưng tôi tự hỏi tại sao svcutil tạo ra một giao diện gây ra một ngoại lệ thời gian chạy (là một lỗi này?), Và liệu có cái gì đó bổ sung tôi phải làm để làm cho nó hoạt động.

+1

Cách giải quyết khác: sử dụng cờ dòng lệnh '/ async-'. –

+0

Khung thời gian chạy của bạn là gì? Có lẽ đó là một hạn chế không có trong khung sau này –

+0

@JamesManning Các mục tiêu lắp ráp .Net 4.5 – vossad01

Trả lời

20

Hành vi mặc định dường như đã được thay đổi. Nếu bạn cung cấp thông số /syncOnly, hãy giữ nguyên hành vi cũ đối với tôi.

/syncOnly       - Generate only synchronous method 
            signature. Default: generate synchronous 
            and task-based asynchronous method 
            signatures. 
+0

Cảm ơn, @Jimmy, nhưng tôi biết hành vi đã thay đổi (xem câu hỏi). Tôi cũng biết về cờ '/ syncOnly' (xem bình luận của tôi cho câu hỏi). Tôi tò mò về lý do tại sao hành vi thay đổi. Tốt nhất tôi có là giao diện mới là mong muốn cho khách hàng mặc dù không hợp lệ cho các máy chủ. – vossad01

+1

Điều khác khiến tôi bối rối khi tôi tìm kiếm giải pháp cho điều này là thông tin trên WWW cho thấy điều này là do các phương pháp quá tải và vấn đề có thể được giải quyết bằng cách đưa ra các phương thức tên OperationContract riêng biệt, nhưng rõ ràng là 'Phương pháp' và 'MethodAsync' không phải là các phương thức quá tải, do đó bằng cách nào đó, mã được tạo ra hoặc VS giải thích nó có cùng tên OperationContract. –