2011-11-25 20 views
6

Tôi (một lần nữa và vẫn) cố gắng tiêu thụ một số dịch vụ WCF trong Monotouch. Cách tiếp cận đầu tiên: thêm tham chiếu web vào Monodevelop không thành công. Nó không thể tạo tệp tham chiếu. Sau đó, tôi đã thử SVCUTIL.EXE và nhận được một lỗi mà ChannelFactory chung không có sẵn trong Monotouch - tôi giả sử vì không có sự phản ánh có sẵn.Monotouch và WCF: sự khác biệt của SVCUTIL.EXE và SLSVCUTIL.EXE và cách tránh ChannelFactory chung không được hỗ trợ?

Tiếp theo tôi đã thử SLSVCUTIL.EXE từ SDK Silverlight 3. Điều này tạo ra không gian tên cho các dịch vụ khác nhau khác với các dịch vụ được tạo thông qua SVCUTIL.EXE. Vì tôi đã có rất nhiều mã wrapper, tôi phải thay đổi rất nhiều.

Những câu hỏi nảy sinh:

  • Tôi có thể ghi đè lên các phương pháp CreateChannel và gửi lại các kênh truyền hình chuyên biệt cho mỗi dịch vụ thay vì phụ thuộc vào phiên bản không tồn tại chung, theo đề nghị của các ngoại lệ đó được ném? Điều này có nghĩa là sửa mã được tạo bởi SVCUTIL.EXE.
  • Làm cách nào để tạo kênh bằng phương pháp ghi đè? Tôi chỉ có giao diện dịch vụ của mình. Tôi googled và không thể tìm thấy bất kỳ ví dụ. Mã trông như thế nào phải được viết bằng phương pháp đó?
  • Hoàn toàn không rõ ràng với tôi: sự khác biệt giữa hai tiện ích dịch vụ là gì?
  • Nếu tôi gặp vấn đề về không gian tên được sắp xếp, các sơ khai được tạo thông qua tiện ích Silverlight có làm cho dự án của tôi hoạt động hay không cũng sẽ gặp vấn đề về kênh chung?
  • tại sao công cụ Silverlight có thể hoạt động mà không tự động phát ra mã? Sự khác biệt trong mã được xuất ra là gì và phiên bản động nào có lợi thế gì?
  • phiên bản nào của Silverlight được hỗ trợ int MT. Tôi có thể sử dụng công cụ v4 hoặc nó có phải là phiên bản 3 không?
  • WCF có hỗ trợ phát trực tiếp MT, như tải xuống các tệp lớn không?

Trả lời

5

WCF là lớn thú và rất khó đưa ra câu trả lời chung, quá phụ thuộc vào chi tiết. Quy tắc chung là MonoTouch hỗ trợ cùng một tập hợp con WCF được giao với Silverlight (ngay cả khi một vài bổ sung đã được thực hiện theo thời gian).

Tôi giả sử vì không có sự phản ánh khả dụng.

Phản ánh khả dụng và hoạt động với MonoTouch. Reflection.Emit hiện không vì Apple không cho phép mã JIT'ing trên thiết bị iOS. Điều này có thể giới hạn một số API yêu cầu tạo mã khi chạy (nhưng không phải là vấn đề nếu việc tạo mã có thể được thực hiện tại thời gian biên dịch).

... Điều này có nghĩa là sửa mã được tạo bởi SVCUTIL.EXE. ...

Mã chiến đấu/chỉnh sửa được tạo thường là ý tưởng tồi (ví dụ: bảo trì trong tương lai). Tôi khuyên bạn nên thử sử dụng slsvcutil.exe trước khi đầu tư quá nhiều thời gian vào việc tùy chỉnh mã được tạo.

...Mã trông như thế nào phải được viết bằng phương pháp đó?

Mã nguồn đầy đủ cho Mono System.ServiceModelSystem.ServiceModel.Web khả dụng nếu bạn muốn cung cấp kênh của riêng bạn (hoặc tùy chỉnh mã được tạo).

Hoàn toàn không rõ ràng cho tôi: sự khác biệt giữa hai tiện ích dịch vụ là gì?

Các SL tiền tố, trong slsvcutil.exe, là cho Silverlight. Microsoft đã tạo công cụ này để tạo mã chỉ sử dụng tập hợp con WCF có sẵn trong Silverlight. Vì đây là cùng một tập con được MonoTouch hỗ trợ, đây là công cụ tốt nhất để sử dụng.

Nếu tôi gặp vấn đề về không gian tên được sắp xếp, các phần tử tạo ra thông qua tiện ích Silverlight có làm cho dự án của tôi hoạt động hay cũng sẽ gặp phải vấn đề chung về kênh?

nên hoạt động. Đó là cách mọi người đang sử dụng (tập hợp con sẵn có) WCF với MonoTouch hôm nay. Nếu có vấn đề với điều này (tập hợp con/công cụ) bạn có thể điền vào một báo cáo bug về nó (với một trường hợp thử nghiệm) và chúng tôi sẽ có một cái nhìn vào nó.

+0

Cảm ơn Sebastien vì câu trả lời chi tiết này! Tôi đã thêm hai điểm nữa ở trên. Nếu bạn tìm thấy thời gian, có lẽ bạn có thể bình luận những người quá? – Krumelur

+0

Được chấp nhận là hầu hết các điểm được trả lời, cuộc thảo luận vẫn tiếp tục trong danh sách gửi thư của Monotouch. – Krumelur

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