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

Exploring Digital Wallet Growth in Latin America: What's Next?

Digital wallets are transforming the global financial landscape, enabling individuals and ...

Read More

How AI Can Augment Telecom Network Management Capabilities

Digital connectivity is essential to our daily lives, and telecom operators face unprecedented ...

Read More

Unlock Profit: Data-Driven Hospitality Revenue Strategies

Have you ever wondered why hotel rates spike during festivals or drop midweek? The answer lies in a ...

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