Silverlight 4 + RIA Services – Ready for Business: Xuất ra các dịch vụ WCF (SOAP\WSDL)


Tiếp tục loạt bài của chúng ta, tôi muốn  nói một chút về cách RIA Services có thể được triển khai như một dịch vụ Soap/WSDL. Điều này rất hữu ích nếu bạn muốn cho phép dùng cùng các quy tắc xử lý và truy cập dữ liệu với các client khác Silverlight. Ví dụ một ứng dụng Winforms hoặc WPF và thậm chí là một ứng dụng console. SOAP cũng là một mô hình đặc biệt tốt cho việc tương tác với Java/JEE.

Đầu tiên bạn sẽ phải thêm tham chiếu đến  assembly Microsoft.ServiceModel.DomainSerivves.Hosting.EndPoints từ RIA Services toolkit.

image

Sau đó bạn cần sửa lại phần endpoint của domainServices trong file web.config. Dưới đây tôi sẽ cho thấy cách cấu hình SOAP và OData:

  <system.serviceModel>
    <domainServices>
      <endpoints>
        <add name="OData"
             type="System.ServiceModel.DomainServices.Hosting.ODataEndpointFactory, System.ServiceModel.DomainServices.Hosting.OData, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
        <add name="Soap"
             type="Microsoft.ServiceModel.DomainServices.Hosting.SoapXmlEndpointFactory, Microsoft.ServiceModel.DomainServices.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
      </endpoints>
    </domainServices>

Bay giờ tất cả những gì bạn cần là truy cập vào URL sau từ trình duyệt (hãy chú ý thay thế giá trị cổng cho phù hợp):

http://localhost:21516/BusinessApplication1-web-DishViewDomainService.svc

Dạng của tên sẽ là [namespace]-[typename].svc

image

Và tôi có được một trang giống như trang debug của WCF service.

Và nếu đi sau hơn nữa, bạn có thể xem cả file WSDL của dịch vụ:

image

Bạn đã hoàn thành việc cấu hình trên server, giờ hãy xem cách dùng trên client. Để đơn giản, tôi sẽ tạo một ứng dụng console, sau đó nhấn phải vào Project và chọn mục Add Services Reference.

image

image

  1: var context = new DishViewDomainServiceSoapClient();

  2: var results = context.GetRestaurants();

  3: foreach (var r in results.RootResults)

  4: {

  5:    Console.WriteLine(r.Name);

  6: }

  7: 

Câu lệnh truy vấn rất đơn giản. Dòng 1 tạo proxy cho client, dòng 2 thực hiện một lời gọi đồng bộ đến server, sau đó ta có thể lập một vòng lặp đơn giản trên tập kết quả.

image

Việc cập nhật dữ liệu thú vị hơn một chút… Tôi cần tạo một ChanageSet để lưu vào các thay đổi, trong ví dụ này tôi chỉ cập nhật một giá trị. Tôi cũng cần gửi giá trị gốc lại cho server.

  1: var changeSet = new ChangeSetEntry();

  2: var org = new Restaurant();

  3: org.ID = entity.ID;

  4: org.Name = entity.Name;

  5: entity.Name = "Updated:" + entity.Name;

  6: changeSet.Entity = entity;

  7: changeSet.OriginalEntity = org;

  8: changeSet.Operation = DomainOperation.Update;

  9: var updateResults = context.SubmitChanges(new ChangeSetEntry[] { changeSet });

 10: 

Và bạn có thể xem kết quả chạy chương trình này:

image

Với phiên bản 1.0, bài viết này mô tả dịch vụ RIA services cho các ứng dụng WPF. Tuy nó chạy được, nhưng rõ ràng vẫn chưa hoàn thiện, các tính năng vẫn chủ yếu hỗ trợ Silverlight. Ví dụ, bạn có thể muốn có đầy đủ các trải nghiệm: DataContext, entities with validation, LINQ queries, change tracking… Khả năng hỗ trợ WPF có trong kế hoạch, nhưng không phải với phiên bản này. Nếu bạn thích cách tiếp cận của RIA Services, bạn có thể cân nhắc DevForce hay CSLA.NET, nó có thể chạy cả trên WPF và Silverlight.

3 thoughts on “Silverlight 4 + RIA Services – Ready for Business: Xuất ra các dịch vụ WCF (SOAP\WSDL)

  1. anh Nam cho em hỏi 1 trang web của mình có thể có nhiều wcf service được không anh? Em làm thử tạo 2 service nhưng nó chỉ nhận một cái hà

  2. Chào anh . Cho em hỏi cái này một tí
    Giả sử em có 1 WebService dùng để call xuống Database Oracle

    Sau đó em tạo một libray là WebBusiness dùng để reference đến WebService ở trên ( lúc này tại library sẽ tự động generate ra file config ServiceReferences.ClientConfig)

    Lúc này em tạo một ứng dụng Silverlight .
    Tại ứng dụng silverlight thực hiện reference đến WebBusiness. và sau đó call lên WebService. Lúc này thực thi ứng dụng –> bị error là xap không tìm thấy file config ServiceReferences.ClientConfig.
    Em đã biết nguyên nhân.
    Là do khi ứng dụng silverlight thực thi thì lúc khởi tạo SOAPClient sẽ tự tìm file ClientConfig mà setting các giá trị như Binding, Endpoint. Mà tại Ứng dụng Silverlight không có Reference trực tiếp lên WebService mà thông qua WebBusiness –> không tồn tại file ClientConfig ở ứng dụng Silverlight được nên bị error.
    Nhưng khi thực hiện copy file ClientConfig trên vào Ứng dụng Silverlight và build lại thì connect OK.

    Vậy anh có cách nào để sử dụng WebBusiness trên mà kô phải copy file ClientConfig vào mỗi ứng dụng Silverlight hay không?
    Em mong hồi âm sớm của anh
    Em cảm ơn.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s