WCF service using Cassandra

Explore WCF service using Cassandra

This is a brief tutorial on how to use Apache Cassandra’s user-defined types (UDT) with C# Windows Communication Foundation (WCF) rest service.

Summary of the Steps

  1. Create user-defined type(Udt)
  2. Create a mapper object for Udt in C#
  3. Register C# Udt object
  4. Connect to Cassandra cluster and create session
  5. Define WCF DataContract and OperationContract
  6. Host in IIS

1. Create User Defined Type

Create a user-defined type for address, fullname and users. There is more info in this datastax tutorial for UDT.

2. Create a mapper object for UDT in ‘C#’

Create a mapper object(CqlPoco). In our case that will also be a data contract. For more data types mapping, refer to CQL data types to C# types.
Class for address:
  public class Address
   {
       public string Street { get; set; }
       public string City { get; set; }
       public int ZipCode { get; set; }
       public IEnumerable<string> Phones { get; set; }
   }
 
Class for fullname:
public class FullName
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}
 
Finally, a class which represent a row in cassandra users table:
  public class User
   {
       public Guid Id { get; set; }
       public IDictionary<string, Address> Addresses { get; set; }
       public IEnumerable<FullName> DirectReport { get; set; }
       public FullName Name { get; set; }
   }
 

3. Register C# UDT object

Configure the POCO object to the Apache Cassandra driver using mapper component.
Map user-defined type (FullName and Address):
session.UserDefinedTypes.Define(
         UdtMap.For<FullName>(),
         UdtMap.For<Address>()
            .Map(a => a.Street, “street”)
            .Map(a => a.City, “city”)
            .Map(a => a.ZipCode, “zip_code”)
            .Map(a => a.Phones, “phones”)
     );
 
In most of the cases, mapper will do the mapping for simple type like Fullname but a better controlled mapping is also possible, like Address, where it is mapped field by field.
Map User class representing a row in a table:
 Cassandra.Mapping.MappingConfiguration.Global.Define(new Map<User>().TableName(“users”)
               .Column(c => c.Id, cm => cm.WithName(“id”))
               .Column(c => c.Addresses, cm => cm.WithName(“addresses”).WithFrozenKey())
               .Column(c => c.DirectReport, cm => cm.WithName(“direct_reports”).WithFrozenValue()));
 

4. Connect to Cassandra cluster and create session

Cassandra and C# setup is complete, so now connect to cluster and use it.
        cluster = Cluster.Builder().AddContactPoint(“127.0.0.1”).Build();
         session = cluster.Connect(“mykeyspace”);

         var users = new Table<User>(session);
         var user = users.
             Where(u => u.Id == Guid.Parse(guid))
             .FirstOrDefault()
             .Execute();

 

5. Setting up a WCF

Decorate the POCO we just created with the DataMember attribute, declare OperationContract and provide a definition. Register mapping (see step 3) with a memoization library. In this case, service constructor was leveraged to initialise the mapping.
  public class UserService : IUserService
   {
       static UserServiceLibrary.Data.DataService dataService;
       static UserService()
       {
           dataService = new UserServiceLibrary.Data.DataService();
       }
   }    
 

6. Hosting WCF service

WCF rest service can be self-hosted using WebServiceHost:
WebServiceHost webhost =  new WebServiceHost(typeof(UserService));
           try
           {
               webhost.Open();
               Console.ReadLine();
               webhost.Close();

           }
           catch (Exception e)
           {
               Console.WriteLine(e);
               webhost.Abort();
           }
       }
 
WCF can also be  hosted in IIS to take the advantage of on-demand loading and application pool using:
<%@ ServiceHost Service=”WcfWebService.UserService”
Factory=”System.ServiceModel.Activation.WebServiceHostFactory”%>
 
The complete source code for this tutorial can be found at Github.

Learn More about Encora

We are the software development company fiercely committed and uniquely equipped to enable companies to do what they can’t do now.

Learn More

Global Delivery

READ MORE

Careers

READ MORE

Industries

READ MORE

Related Insights

Enabling Transformation in Hospitality through Technology-Led Innovation

As the exclusive sponsor of the 2024 Hotel Visionary Awards, we support organizations leading ...

Read More

Key Insights from HLTH 2024: The Future of Patient-Centered Healthcare

Discover key insights from HLTH 2024 on digital health, AI in diagnostics, data interoperability, ...

Read More

Data-Driven Engineering: Transforming Operations and Products from Insight to Impact

Discover how data-driven engineering transforms operations and product development, enhancing team ...

Read More
Previous Previous
Next

Accelerate Your Path
to Market Leadership 

Encora logo

Santa Clara, CA

+1 669-236-2674

letstalk@encora.com

Innovation Acceleration

Speak With an Expert

Encora logo

Santa Clara, CA

+1 (480) 991 3635

letstalk@encora.com

Innovation Acceleration