2011-12-10 41 views
5

Tôi đang thiết lập một dịch vụ .NET 4.0 WCF mới với phương thức (hoạt động) lấy kiểu dữ liệu được tạo mạnh mẽ XSD làm tham số. Điều này làm cho mọi thứ sạch sẽ và gọn gàng cho khách hàng - khách hàng có thể làm việc với các loại mạnh mẽ và không phải suy nghĩ về XML.Nhận XML thô của các tham số trong việc triển khai dịch vụ WCF

Tuy nhiên, khi triển khai dịch vụ WCF, tôi muốn xử lý dữ liệu tham số dưới dạng tài liệu XML (LINQ XDocument) thay vì loại đối tượng được deserialized. Thật tuyệt khi WCF sẽ deserialize để loại rõ ràng, nhưng đối với thuật toán chung của tôi nó thuận tiện hơn và linh hoạt hơn để đối phó với các tài liệu xml thay vào đó, chủ yếu là vì dữ liệu đến là đa hình.

Tôi biết tôi chỉ có thể lấy các đối tượng tham số và tuần tự hóa chúng trở lại XML, nhưng điều này có vẻ lãng phí.

Tôi hiểu rằng tôi có thể thay thế các thông số được nhập mạnh mẽ với XElement để có được những gì tôi muốn để thực hiện tiện lợi, nhưng điều này sẽ mất lợi ích của việc gõ mạnh (kiểm tra trình biên dịch, intellisense, tự tài liệu) cho khách hàng.

Có cách nào để nói với WCF rằng trong việc triển khai dịch vụ của tôi, tôi không cần các đối tượng tham số deserialized, mà tôi muốn chúng như XML thay vào đó?

Hoặc, có cách nào để truy cập XML thô của các tham số như trước khi WCF deserializing chúng thành các đối tượng không? Nếu tôi không thể ngăn WCF từ bỏ thời gian deserializing các đối tượng ít nhất này sẽ tránh chi phí reserializing chúng trở lại XML.

+0

Tôi sẽ vẫn nghĩ rằng nó thực sự đáng giá rắc rối, tại sao không tăng tốc độ serailization và deserilazation. –

+0

@SurjitSamra Tôi không hiểu bình luận của bạn. Bạn đang nói rằng WCF không phải là giá trị phức tạp, hoặc quan tâm của tôi trong việc truy cập XML thô không phải là giá trị rắc rối? Tôi không thể làm bất cứ điều gì về tăng tốc serialization hoặc deserialization, khác hơn để tránh các chuyến đi vòng không cần thiết. – dthorpe

+0

xin lỗi tôi đã không rõ ràng trong bình luận của tôi Tôi thực sự có nghĩa là truy cập XML thô là giá trị phức tạp? WCF cũng có giá trị của mọi rắc rối :), gần đây tôi đã di trú trên hệ thống distroubization .NET từ 10 tuổi trở lên trong WCF, có quá trình serialization/deserialization nặng để tăng tốc mọi thứ, nếu bạn sử dụng một số loại tiêm như một marc_s đã nói trong Ans sau đó bạn sẽ tìm thấy bao lâu acutally tất cả mọi thứ có, trong trường hợp của tôi tôi đã hạnh phúc mà deserialization chỉ mất <30 ms. –

Trả lời

3

Một cách để thực hiện việc này là tạo một message inspector để kiểm tra thư đến trên máy chủ và hành động trên thư (ví dụ như lưu trữ nó đi hoặc một cái gì đó).

Pablo Pialorsi có great blog post on how to write a message inspector, step-by-step

Kiểm tra thông điệp sẽ cung cấp cho bạn truy cập vào các thông số trong các định dạng thông điệp SOAP thô. Tôi nghĩ có lẽ một thanh tra tham số có thể là lựa chọn tốt hơn, nhưng nó sẽ xuất hiện như thể những thanh tra này chỉ nhận được thông số cho bất kỳ cuộc gọi dịch vụ nào khi các tham số đó đã được deserialized thành các đối tượng rồi, vì vậy không âm thanh như một cách tiếp cận khả thi ....

+0

Thú vị.Sẽ điều tra, cảm ơn. – dthorpe

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