Chúng tôi có một dịch vụ web và chạy được xây dựng trong VS2010.Có cách nào tốt để mở rộng dịch vụ WCF bằng cách sử dụng basicHttpBinding để cũng cho phép dịch vụ REST giao tiếp với JSON không?
Một số hợp đồng hoạt động trông như thế này:
[OperationContract]
ITicket Login(string userName, byte[] passwordHash, string softwareVersion);
Tức là họ gian hàng có các đối số phức tạp và các kiểu trả về phức tạp, hoặc thậm chí nhiều trả về.
Gần đây, chúng tôi đã bắt đầu một dự án iPhone được thuê ngoài và cho phép họ sử dụng dịch vụ này để liên lạc với máy chủ của chúng tôi. Từ những gì tôi đã học được từ họ, tôi hiểu rằng đây không phải là một thực hành tốt để giao tiếp với iPhone (ví dụ như thiếu các cách tốt để tiêu thụ WSDL). Và do đó tôi đã bắt đầu xem xét khả năng phơi bày dịch vụ như một dịch vụ REST giao tiếp với JSON.
Tôi đã thêm một thiết bị đầu cuối mới, sử dụng webHttpBinding, trang trí hợp đồng như thế này:
[OperationContract]
[WebGet(UriTemplate = "/login?username={userName}&password={password}&softwareVersion={softwareVersion}", ResponseFormat=WebMessageFormat.Json)]
ITicket Login(string userName, string password, string softwareVersion);
Phương pháp này hiện đang làm việc như dự định.
sau đó tôi đã cố gắng để trang trí một phương pháp khác như thế này:
[OperationContract]
[WebGet(UriTemplate = "/GetMetaData?ticket={ticket}",RequestFormat=WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
IMetaData GetMetaData(ITicket ticket);
Khi tôi bây giờ cố gắng truy cập này, tôi nhận được lỗi sau:
Server Error in '/Jetas5MobileService' Application. Operation 'GetMetaData' in contract 'IJetas5MobileService2' has a query variable named 'ticket' of type 'Jetas.MobileService.DataContracts.ITicket', but type 'Jetas.MobileService.DataContracts.ITicket' is not convertible by 'QueryStringConverter'. Variables for UriTemplate query values must have types that can be converted by 'QueryStringConverter'.
Tôi có quản lý để xây dựng một OperationContract rằng chỉ lấy một chuỗi làm đối số và sau đó phân tích cú pháp mỏng ở mặt sau bằng cách sử dụng DataContractJsonSerializer
, nhưng điều đó cảm thấy giống như một hack xấu xí.
Có cách nào để giải quyết vấn đề này theo cách tốt hơn không? Tôi là người mới bắt đầu khi nói đến WCF và REST vì vậy đừng ngần ngại chỉ cho tôi bất kỳ hướng dẫn mới bắt đầu nào có thể có ở đó. Tôi đã cố gắng tìm kiếm chúng nhưng số lượng nguồn khổng lồ làm cho việc tìm kiếm những nguồn tốt trở nên khó khăn.
bạn đang sử dụng phiên bản WCF nào? –
Tôi đang sử dụng .net4 và VS2010, điều đó có trả lời được câu hỏi không? Khác cho tôi biết làm thế nào tôi có thể tìm nó lên. –