Tôi đang tìm những lý do vượt quá các tham số "thông thường" gây nhầm lẫn và cho biết phương thức đang làm nhiều hơn một đối số kiểu "" và nhiều hơn nữa về những gì đặc biệt xấu về các tham số đầu ra trong các dịch vụ WCF. Bây giờ tôi làm việc, chúng tôi có một quy tắc chống lại họ trong các dịch vụ WCF, và tôi đang cố gắng giải thích tại sao!Có thực hành không tốt để có tham số đầu ra trong một phương thức trong dịch vụ WCF không?
Trả lời
Cá nhân, tôi sử dụng các tham số ở những nơi cụ thể (chẳng hạn như phương thức có tên TryParse()). Vì vậy, tôi có một số thiên vị mà bạn đã nói về nơi tôi chỉ sử dụng nó ở những địa điểm cụ thể, hạn chế. Ngoài ra, bạn không thể giả định rằng một ứng dụng .Net sẽ tiêu thụ nó ở đầu bên kia. Bởi vì WCF cung cấp một giao diện tiêu hao như một SOAP hoặc dịch vụ web REST (trong số các loại giao tiếp khác), tôi không thể đảm bảo rằng WCF thậm chí sẽ hỗ trợ các tham số cho khả năng tương thích với người tiêu dùng non -.Net.
Ngoài ra, dịch vụ WCF đang cung cấp API cho người tiêu dùng và API nên cung cấp giao diện cần được tiêu thụ với kiến thức hạn chế về cách các phương thức máy chủ được mã hóa. (Đừng đoán anh chàng viết máy chủ WCF là cùng một người viết khách hàng ở đầu kia). Cố gắng sử dụng một tham số ngoài trên một API có vẻ như một mùi mã. Có lẽ, người ta sẽ sử dụng một tham số ngoài để trả lại (các) giá trị khác cho người tiêu dùng. Hãy xem xét thay vì sử dụng một đối tượng tin nhắn. Một đối tượng tin nhắn được đặc biệt bao gồm tất cả các mẩu dữ liệu cần được gửi từ máy chủ WCF đến người tiêu dùng của nó. Ví dụ, giả sử bạn có một phương pháp tiếp xúc trong một máy chủ WCF gọi TryCreateUser:
bool TryCreateUser(string name, string email, out User user){}
nơi bạn có ý định trả lại một bool chỉ ra nơi người dùng tạo ra xảy ra thành công và một đối tượng tài chứa người dùng nếu nó thành công. Tôi sẽ tạo một lớp mới, UserCreationMessage:
class UserCreationMessage {
bool IsSuccessful;
User user;
}
Trả lại đối tượng thông điệp này lại cho người tiêu dùng và bạn vẫn có thể nhận được nhiều giá trị trả lại. Tuy nhiên, bây giờ bạn có một đối tượng mạch lạc được trả về, điều đó giải thích nhiều hơn cho người dùng cuối của API. Cuối cùng, tôi muốn lý do thực hành không tốt để có tham số ngoài trong API, chẳng hạn như máy chủ WCF vì người lập trình tạo người tiêu dùng cho dịch vụ này phải có thể dễ dàng xem API và tiêu thụ nó mà không nhảy qua các vòng mà một tham số hiện tại. Vì thiết kế tốt hơn cho điều này tồn tại, hãy sử dụng nó. API yêu cầu các tiêu chuẩn mã hóa cao hơn, đặc biệt là trong giao diện tiếp xúc với người tiêu dùng cuối cùng.
Một lý do là thông số out
được xử lý bởi lớp proxy được tạo khi bạn thêm tham chiếu dịch vụ - đó là phí phụ trội.
Một lý do khác: theo this post, ngay cả khi out
tham số ban đầu là cuối cùng khi bạn tiêu thụ nó, nó trở thành đầu tiên - khó hiểu và có thể dẫn đến sai sót biến chứng có thể mất thời gian để giải quyết cho đến khi ai đó phát hiện này ra.
Ý kiến cá nhân: hoạt động WCF (phương pháp) nên làm điều gì đó và trả lại một cái gì đó. Nó có thể làm rất nhiều thứ, nhưng chỉ trả lại một thứ mà là kết quả - nếu bạn cần thêm công cụ, nó sẽ trả về kiểu phức tạp với mọi thứ bạn cần làm các trường dữ liệu thuộc loại đó.
- 1. Hợp đồng dịch vụ WCF có thể có tham số đầu vào không có giá trị không?
- 2. Dịch vụ WCF Trả lại "Phương thức không được phép"
- 3. WSDL - không có đầu vào - thực hành tốt nhất
- 4. Dịch vụ WCF có phải là dịch vụ web không?
- 5. Thực hành tốt nhất cho dịch vụ WCF lớn?
- 6. Làm cách nào để gọi phương thức có tham số đầu ra trong PowerShell?
- 7. Cách tốt nhất để xác thực giá trị tham số của phương thức WCF và WebService
- 8. Tham chiếu dịch vụ WCF tạo ra các phương thức void từ WSDL
- 9. Phương pháp dịch vụ WCF không có trong WCF Test Client vì nó sử dụng loại
- 10. Tại sao dịch vụ WCF này không nhận ra tham số UriTemplate?
- 11. Có cách nào để trưng ra nhiều dịch vụ WCF qua một điểm cuối không?
- 12. Chúng ta có thể thực hiện quá tải phương thức trong lớp dịch vụ web không?
- 13. Tên phương thức dịch vụ WCF trong Nhật ký IIS
- 14. Làm thế nào để có được Debug/Trace.Writeline đầu ra từ một Dịch vụ WCF
- 15. IEnumerable & Thực hành tốt (& WCF)
- 16. Có thực hành tốt để có truy vấn LINQ trong Bộ điều khiển không?
- 17. Có điều gì như quá nhiều dịch vụ WCF không?
- 18. Thực hành tốt có sử dụng cụm từ thông dụng để xác thực đầu vào không?
- 19. Bảo mật Giao thông có phải là hành vi không tốt cho dịch vụ WCF qua Internet không?
- 20. Dịch vụ WCF không đồng bộ thực sự
- 21. Tôi có thể tự động tạo một tham chiếu dịch vụ cho một dịch vụ WCF REST không?
- 22. Dịch vụ WCF có nên đơn lẻ hay không?
- 23. Có thể hạn chế một tham số kiểu phương thức chung của C# như "có thể gán từ" tham số kiểu của lớp có chứa không?
- 24. Làm cách nào để ngăn chặn tham số ngoài kết thúc tham số trả về trong dịch vụ web WCF?
- 25. Dịch vụ WCF Không Với Phương pháp không được phép
- 26. Dịch vụ WCF có cung cấp các đặc tính không?
- 27. Chạy phương thức có tham số trong chuỗi trong C#
- 28. Cách gọi mà không có phương thức tham số?
- 29. Truyền một đối tượng có kiểu không xác định làm tham số trong phương thức Java
- 30. Thực hành tốt nhất cho dịch vụ WCF với lượng lớn dữ liệu?
+1 để đề cập đến đối tượng tin nhắn. – slugster