Wednesday, May 29, 2013

Create JSONP WCF Service




  • Open VS2012 , then Click New Project, Select  WCF Service library as  New Project  Template      (File --> New Project à WCF  --> WCF Service Library) and Change the Name and Solution name as “ClacLib” and “MyCalcultor”  



    
  •      Open IService1.cs file and delete everything and paste this
            using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace ClacLib
{
    [ServiceContract]
    public interface IService1
    {
        [OperationContract]
        string GetData(int value);

    }
}


  • Add “System.ServiceModel.Web” as Reference to WCF Service Lib project.


  •  Open Service1.cs file and delete everything  and paste this

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Activation;
using System.ServiceModel.Web;
using System.Text;

namespace ClacLib
{

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
   
    public class Service1 : IService1
    {

        [Description("Accepts LoginName and Get Employee By Login Name")]
        [WebGet(BodyStyle = WebMessageBodyStyle.Bare,
        RequestFormat = WebMessageFormat.Json,
        ResponseFormat = WebMessageFormat.Json,
     UriTemplate = " GetData?value={value}")]

        public string GetData(int value)
        {
            return string.Format("You entered: {0}", value);
        }
    }
}

Explanations:

WebGet – Get Method
Request Format and Response Format – accept and return data as JSON Objects
UriTemplate – PostFix of Service URL


  • Modify App.config file

You can delete this file , since we separate the service part from hosting part. But Keep   it As it is. We want only Web.Config file. 

  • Create new project under the same Solution and Select WCF Service Application as Project Template


  • Delete IService1.cs file and delete the cs file. We don’t want those two files since we have separated Service part from hosting part.




  •      Open Service1.svc file and delete ” CodeBehind="Service1.svc.cs"” part and Change the Service value

                                            Service Lib Project Name              Implemented Class Name


  • Add Service lib as Ref to Service Host project



Then click “OK”.

  • Modify the Web.config file

a.       Delete Service Model Section


b. Copy and paste below Section within that space as New Service Model

<system.serviceModel>

    <bindings>
      <webHttpBinding>
        <binding name="webHttpBindingWithJsonP" />
      </webHttpBinding>
    </bindings>

    <behaviors>

      <endpointBehaviors>
        <behavior name="webHttpBehavior">
          <webHttp helpEnabled="true" />
        </behavior>      
      </endpointBehaviors>

      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true"/>
          <serviceThrottling maxConcurrentCalls="100" maxConcurrentSessions="1000" maxConcurrentInstances="1160"/>
          <dataContractSerializer maxItemsInObjectGraph="655360000"/>
        </behavior>
      </serviceBehaviors>

    </behaviors>

    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />

    <services>
      <service name=" ClacLib.Service1">
        <endpoint address="Calc"
                  behaviorConfiguration="webHttpBehavior"
                  binding="webHttpBinding"
                  bindingConfiguration="webHttpBindingWithJsonP"
                  contract=" ClacLib.IService1"/>
      </service>
    </services>
  </system.serviceModel>

Explanations :

Services Tag –   Endpoint settings
Binding Tag -     Binding related Settings
Behaviors Tag - Behaviors related Settings


  •  Debug the application by press F5 or Click “Run”. It will host your service in localhost and open it in default browser. Give the correct URL and check whether it s working or not.

          Or else Use this URL
          http://localhost:8733/Service1.svc/Calc/GetData?value=4


  • Publish the Site and check again (How to Publish the Site ??? – Check here)

          I published the site in http://cd-ksurendran:8001
          Give some test values for {VALUE}

          Result of this URL look like this :



          If you don’t remember full URL  or want some help, Use this URL , it will display all  Operation Contract under specific Service Contract with some details

Result of this URL look like this :





Friday, May 10, 2013

Create Custom Event log for your Project

You can log your custom events from your application/Project to Window Event Viewer. This is mainly used for Debug or Error/Exception handling.

How to create Event Logger ?


public class EventLogger
    {
        string SourceName;  // Source name of an evet receiver
        public EventLogger(string sourcename)
        {
            this.SourceName = sourcename;
        }

        public void WriteToEventLog(string message)
        {
            EventLog elog = new EventLog();

            if (!EventLog.SourceExists(SourceName))
            {
                EventLog.CreateEventSource(SourceName, SourceName);
            }

            elog.Source = SourceName;
            elog.EnableRaisingEvents = true;
            elog.WriteEntry(message);
        }

    }

How to Use it ?

EventLogger eventlog = new EventLogger("MyEventLog");
eventlog.WriteToEventLog("Testing My Event Log!!!");

Where to find our log ?

Start --> Type "EventViewer" --> expand "Applications and Services Logs" and click your EventLog (By SourceName which you gave in the EventLogger Constructor)

How to delete the source from Event Viewer?

[HKEY_LOCAL_MACHINE] --> SYSTEM --> CurrentControlSet --> Services --> Eventlog then select your Event Logger then right click and delete it.