Friday, December 30, 2011

Consumption of WCF Service during development

-Balaji Ramasamy
As I was working on project, it demanded to run the WCF service during development which was a challenging task for a novice developer. We successfully developed the WCF service by implementing the service contract interface & service behavior class. The above developed WCF service needs to be consumed by the client application, which will interact with the end point of the services and provides the requested response. To successfully build and test the application, the WCF service needs to be exposed, which will be consumed by client application with the help of svcutil tool. Since the WCF service is a class library, we can’t run it as service.

So here comes the question of how to run the WCF service to generate and consume the service proxy in my client windows application during development. We are very much aware of hosting the service via the console application, winforms application, windows service, IIS, WAS to host the WCF service. Initially we ran the WCF service as windows service, assuming it as a right decision, which resulted in multiple installation and un-installation of windows service. To avoid such painful process during development, we planned to run the WCF service in console application. But how to run in console application? Here comes the ServiceHost runtime, which will enable to the WCF service to load the service class, set up the endpoints and channel listeners, which provides your service class an “ecosystem” to live and operate in.

You can either instantiate a ServiceHost class yourself in a console app, a Windows service, or even a Winforms app, and thus make your WCF service class available to the outside world - or you can delegate that work to IIS or WAS. Even IIS or WAS will use a ServiceHost to host your WCF service - they just do it automatically behind the scenes.

The following is the console application code to run the WCF service
internal class Program
{
private static void Main(string[] args)
{
try
{
StartService();
Console.WriteLine("Service is running...");
Console.WriteLine("Press key to end...");
Console.ReadLine();
StopService();
}
catch (Exception ex)
{
//Log the Exception
}
}
internal static ServiceHost myServiceHost = null;
internal static void StartService()
{
try
{
myServiceHost = new ServiceHost(typeof([namespaceName.ServiceBehaviourClassName]));
myServiceHost.Open();
}
catch (Exception ex)
{
//Log the Exception
}
}
internal static void StopService()
{
try
{
if (myServiceHost.State != CommunicationState.Closed)
myServiceHost.Close();
}
catch (Exception ex)
{
//Log the Exception
}
}
And the Application configuration includes be the following

<system.serviceModel>
 <services>
  <service name="[namespaceName.ServiceBehaviourClassName]"
  behaviorConfiguration="metadataSupport">
   <host>
    <baseAddresses>
    <add baseAddress="[EndPoint Address]" />
    </baseAddresses>
   </host>
  <endpoint address="" binding="[Binding Name]"
   contract="[namespaceName.ServiceContractName]" "/>
  <endpoint address="mex" binding="mexNamedPipeBinding"
   contract="IMetadataExchange"/>
 </service>
</services>
<behaviors>
  <serviceBehaviors>
   <behavior name="metadataSupport">
   <serviceMetadata />
   <serviceDebug includeExceptionDetailInFaults="true" />
   </behavior>
  </serviceBehaviors>
</behaviors>
</system.serviceModel>
Note: Application Configuration may vary from one binding to another binding. Please check Microsoft MSDN site for more details about bindings and its related configuration

Now run the service and its ready to consume in the client application during development stage of our application

References:





Wednesday, December 21, 2011

Integrate Microsoft Lync 2010 to your .Net Application

- Mohankumar Deivasigamani
This post focus on the process to integrate Microsoft Lync 2010 to your .Net application.
Microsoft Lync is an instant messaging clients . It is a replacement for Windows Messenger and has added feature set that is mainly targeted towards corporate environments.

Note: For this tutorial I assume that you have Lync 2010 running on your machine. Also your machine has Visual Studio 2010.
So here we go with the steps for integration

Step 1: Download and install Lync SDK 2010 (free) on your machine.

Step 2: Open Visual Studio 2010 and create a “New Project”. Select a “WPF Application” template for this project.


Step 3: Lync SDK controls will be available in "Tool box", You can drag the control to your form. For example here I am using few controller like “MyPresenceChooser”, ContactSearch & ContactSearchResultList.

Step 4: Test your application by clicking “Run” from your Visual Studio. The output appears as below, where you see the Lync 2010 gets integrated to your application.

To make it more effective here below i am comparing the output of the application to the Lync 2010 installed in your machine.



So thats it for the basic integration and now you can start customizing and adding more stuffs with your code.


Friday, December 9, 2011

Azure - BLOB Storage


-Balaji Ramasamy
Windows Azure offers four core storage services namely Blob, Table, Queue and Drive, which are accessible via multiple instances / applications simultaneously representing a dedicated storage instead of temporary storage. The simplest way to store with Windows Azure is Binary Large Object (BLOB) Service. In this blog, I provide highlights of storage services offered by MS Azure and compared the same with AWS S3 (Simple Storage Service) that enables you to store data in the AWS cloud.

We can store the files in three ways. The file size with 64MB or lesser size can be uploaded as a single BLOB. If the file size exceeds 64MB then we can go for BLOCK Blob or PAGE Blob.

The BLOCK Blob supports 200GB of total file size and each block should be maximum of 4MB and its identified by BlockID which is unique within the Blob. Block ID is Base64 encoded string of same length and its values can be duplicated in different blobs.
When using base-64 encoding, the pre-encoded string must be 64 bytes or less. The maximum of 50,000 blocks is allowed for each blob. The maximum of 1,00,000 uncommitted blocks is allowed, its total size should be 400GB and finally the uncommitted blocks will be garbage collected after a week. We have to call PutBlockList to commit the uploaded blocks.

The PAGE Blob supports 1TB of total size and each page should be maximum of 4MB and its collection of 512-bytes. To create a page blob, initialize the page blob and specify the maximum size. Writes to page blobs happens in-place and are immediately committed to the blob. It’s optimized for random read and writes operation.

BLOB Storage Local Testing
  1. Local Storage is provided by Windows Azure to test cloud storage with help of Storage Emulator.
  2. Blobs in the Windows Azure storage emulator are limited to 2 GB.
  3. When making a request against the local storage service, specify the local hostname and Blob service port as 127.0.0.1:10000, followed by the local storage account name
The following is a comparison of Amazon Simple Storage Service and Azure BLOB Storage.

AMAZON
Simple Storage Service
AZURE
BLOB Storage
User Subscription
Single Account Multiple Accounts
Security Keys
Two set of acceskey and secret key Account name with Primary Access Key / Secondary Access Key
Authentication
With Acceskey and Secretkey With Account name and Primary Access Key or Secondary Access Key
Domain Name
Bucket Name and its unique Account Name and its unique
Contents are categorized by
Bucket Container
Size Limitations on Storage
No size limit on storage 100TB storage size per account
Size Limitations on File-Size
Up to 5GB in a single PUT
Up to 5 TB using multipart upload
Up to 64MB for single Blob.
Up to 200GB for Block Blobs
Up to 1TB for Page Blobs
Specifying API Version in Request Header
N/A
x-ms-version
http://msdn.microsoft.com/en-us/library/windowsazure/dd894041.aspx
Offline Testing
N/A Local Storage is provided by Windows Azure to test cloud storage with help of Storage Emulator.
Versioning
Enable/Disable/Suspend versioning at Bucket Level Provided Snapshot functionality for object(s).
Logging
Bucket Level Logging


No size limitations.

Logs stored in configured Bucket and Prefix
Service(Blob, Table, Queue) Level Logging for storage account's

20TB size limitations other than 100TB storage size.

Log data is stored as block blobs in a container called $logs in the blob namespace of your account

Logs can be accessed thru $logs container using http://<accountname>.blob.core.windows.net/$logs

Log name under the $logs container will have the following format:
 <service name>/YYYY/MM/DD/hhmm/<Counter>.log

Reference:







LIST API Comparison


Amazon
Azure

LIST Bucket
LIST Container

Name
Description
Name
Description
Prefix Prefix Keys that begin with the indicated prefix. prefix Filters the results to return only blobs whose names begin with the specified prefix.
Marker
Marker
Indicates where in the bucket to begin listing.
Marker
Indicates where in the bucket to begin listing.
No.of Records MaxKeys
1000
maxresults
5000
Next-
Marker
NextMarker NextMarker element has a value only if the list results are not complete. NextMarker NextMarker element has a value only if the list results are not complete.
To dentify list complete or not IsTruncated Specifies whether (true) or not (false) all of the results were returned. All of the results may not be returned if the number of results exceeds that specified by MaxKeys. N/A N/A
Delimiter Delimiter Causes keys that contain the same string between the prefix and the first occurrence of the delimiter to be rolled up into a single result element in the Common-
Prefixes collection.
delimiter When the request includes this parameter, the operation returns a BlobPrefix element in the response body that acts as a placeholder for all blobs whose names begin with the same substring up to the appearance of the delimiter character. The delimiter may be a single character or a string.
Folders Common-Prefixes
BlobPrefix
FileName Key The object's key. Name name of the object
Size Size Size in bytes of the object. Content-Length / Size Size in bytes of the object.
Metadata N/A N/A include snapshots,metadata,
uncommittedblobs
ETag ETag MD5 hash of the object. The ETag only reflects changes to the contents of an object, not its metadata. Etag identifier
Content Type N/A N/A Content-Type blob-content-type
Modified Date LastModified Date and time the object was last modified. Last-Modified /LastModified date-time-value

Hope this post helped you to understand Azure BLOB Storage.