header image

Archive for 9534

Specify the communication mechanism – communicating a message to an endpoint

  • Protocol
    Determine the security, reliability, context flow settings

  • Transport channel
    Determine the underlying transport protocol
    E.g. http, https, namedpipe, MSMQ

  • Message encoding
    Determine the wire encoding to use for messages
    E.g. binary, text/xml, MTOM(Message Transmission Optimization Mechanism (MTOM)

Things to keep in mind when you think about WCF binding

  • Message Version
  • Transport Security
  • Message Security
  • request-reply(default),one-way (fire and forget), duplex (both way)
  • Reliability
  • Transaction
  • Streaming

For further you can refer

http://msdn.microsoft.com/en-us/library/ms731092.aspx

under: 9534

ServiceContractAttribute 

  • Name  and Namespace – The name and namespace are the optional attibutes. Default name is same as the contract type and namespace is http://tempuri.org. It is always recommondable to use Namespace to specify proper namespace which remove the conflict of the datatype/contract.
  • CallbackContract – Return contract in a two-way (duplex) conversation.
  • HasProtectionLevel and ProtectionLevel – Specifies whether all messages supporting the contract have a explicit ProtectionLevel value.
    Default ProtectionLevel is ProtectionLevel.None.
  • ConfigurationName – The name of the service element in the configuration file to use.
  • SessionMode – This is to specify whether the contract requires a binding that supports sessions.

OperationContractAttribute

  • Name: The name of an operation is part of a service contract. Default is the method name.
  • Action: The send message dispatches to the method for the operation based on action.
  • ReplyAction: To specify the reply message
  • IsOneWay: Specifies whether the operation is one directional that an does not return a reply message. This is commonly used for notification service.
  • ProtectionLevel
  • IsInitiating: Specifies if the operation is the intial operation in a session. 
  • IsTerminating: Specifies if the session will be terminated after the operation
  • AsyncPattern: To asynchronously using a Begin/End method pair
under: 11143, 9534, 9536

RESTful WCF Service

Posted by: | July 8, 2009 | No Comment |

RESTful WCF Services works by identifing the Resources & Action from Uniform Resource Identifiers (URIs).

A RESTful web service is called by a unique URI to refer a resource and HTTP verb is to define actions to the resource.

HTTP Method – Verb
GET – Fetch
PUT – Update/Insert
DELETE – Delete
POST – Append

webHttpBinding is a new WCF binding in Fx 3.5 to develop RESTful services. This does not use SOAP envelopes HTTP and HTTPS Transports. It supports XML, JSON and Binary (streams).

WebServiceHost is a specialized SerivceHost which automatically configures address, binding, contract.
If no endpoint is defined, WebServiceHost automatically creates a default endpoint. WebServiceHost adds WebHttpBehavior and disables the HTTP Help page and the Web Services Description Language (WSDL) GET functionality.

[WebGet] And [WebInvoke] attribute
Binds a WCF operation to URI space and HTTP method Indicate the HTTP Method for the operation

WebGet – No method is require

WebInvoke – All verbs other than GET (Method parameter takes in the name of the Verb)

Other attributes can mentioed
BodyStyle – Indicates whether the Request/ Response are wrapped or not
RequestFormat – Json or Xml
ResponseFormat – Json or Xml

UriTemplate – Rich binding to URI UriTemplate String that allows define the structure/pattern of the URI

under: 9531, 9532, 9534

ServiceContractAttribute 

  • Name  and Namespace – The name and namespace of the contract in the WSDL <portType> element we can modify by specifying this two attribute. Default name is same as the contract type and http://tempuri.org. It is always recommondable to use Namespace to specify proper namespace which remove the conflict of the datatype/contract.
  • CallbackContract – It is used to mention the return contract in a two-way (duplex) conversation.
  • HasProtectionLevel and ProtectionLevel – Specifies whether all messages supporting the contract have a explicit ProtectionLevel value.
    Default ProtectionLevel is ProtectionLevel.None.
  • ConfigurationName – The name of the service element in the configuration file to use.
  • SessionMode – This is to specify whether the contract requires a binding that supports sessions.

Ref: http://msdn.microsoft.com/en-us/library/system.servicemodel.servicecontractattribute.aspx

OperationContractAttribute
Name: The name of an operation is part of a service contract. Default is the method name.
Action
ReplyAction
IsOneWay
ProtectionLevel
IsInitiating
IsTerminating
AsyncPattern: To asynchronously using a Begin/End method pair
Ref: http://msdn.microsoft.com/en-us/library/system.servicemodel.operationcontractattribute.aspx

DataContractAttribute 
http://msdn.microsoft.com/en-us/library/system.runtime.serialization.datacontractattribute.aspx

DataMemberAttribute 
http://msdn.microsoft.com/en-us/library/system.runtime.serialization.datamemberattribute.aspx

MessageContractAttribute
IsWrapped
ProtectionLevel
WrapperName
WrapperNamespace
Ref: http://msdn.microsoft.com/en-us/library/system.servicemodel.messagecontractattribute.aspx

MessageHeaderAttribute
Name
Namespace
ProtectionLevel
Actor
MustUnderstand
Relay
Ref: http://msdn.microsoft.com/en-us/library/system.servicemodel.messageheaderattribute.aspx

MessageBodyMemberAttribute
Name
Namespace
ProtectionLevel
Order
Ref: http://msdn.microsoft.com/en-us/library/system.servicemodel.messagebodymemberattribute.aspx

FaultContract
Ref: http://msdn.microsoft.com/en-us/library/system.servicemodel.faultcontractattribute.aspx

under: 9534, 9536, 9541

Download – The Service and Client Application

under: 9534

Windows Communication Foundation (WCF) application is divided two layers namely Services and Clients

The WCF services can be exposed in different ways through Web, Windows Service, Self Hosting [Running Console Application]. The Endpoint [Which is having the Address, Binding, Contract(ABC)] is definded to expose service or consume it.

In our sample code so far we have developed Console Based application for both Service and Client Applications; then we have deployed the serive in IIS 6.0 in Windows Server 2003 in the first set of applications. The next set of applications are Web Applications.

For developing a WCF Service we have gone through steps
A. Sevice Layer
Step I – Designing Contracts
Step II – Service Hosting and Selecting Bindings
Step III – Configuring for Hosting the Service

B. Client Application
Step IV – Based on Sevice creating Proxy for invoking the Service

Now we will discuss futher in details.

We have looked that in both application, we have the one common thing, that is Endpoint includes the Service Contact, Address and Binding; only service hosting and client applications are different. The service contact is first item to be designed fo a Service.

A service contract is all about:

  • Grouping of operations
  • Signature of the operations for exchanging Mesages
  • Data types of these messages.
  • Protocols and serialization formats for communicating the messages

The contact is a set of specific messages organized into basic message exchange patterns (MEPs), such as request/reply, one-way, and duplex

One Way – Datagram-style delivery
Request-Reply – Immediate Reply on same logical thread
Duplex – Reply later and on backchannel (callback-style)

Three Types of Contracts
Service Contract – Operations, Behaviors and Communication Shape
Data Contract – Defines Schema and Versioning Strategies
Message Contract – Allows defining application-specific headers and unwrapped body content

All the contracts are defined on .NET application as CLR types and and on the wire it represents as XML format – WSDL/XSD/SOAP. This is implemented through Attributes. Here the details for all the types

Service
The Service and operations defines in a service through ServiceContract and OperationContract attrubutes.
Mapping: CLR types -> Web Services Description Language (WSDL)

Data
Describes a data structure using DataContract and DataMember attributes.
Mapping: CLR types -> XML Schema Definition (XSD)

Message
Defines the structure of the message on the wire using MessageContract, MessageHeader, MessageBody
Mapping: CLR types -> Simple Object Access Protocol (SOAP) messages.

Fault/Exception
For any CLR exceptions defined as fault contract using FaultContract attribute and the fault’s CLR Type converts to SOAP faults.
Mapping: CLR types -> SOAP faults

under: 9534

Now after creating “Hello World” most easy Service we will very happy to see by getting access throug a browser to access WSDL file and can be used in any other application by adding Service Reference. 
Yes, we can access it just like to .asmx web service through .svc file. To host one service using IIS 6.0 – Windows Server 2003, we have to map .svc file ISAPI extention. WCF Service Hosting with IIS Here is the the .SVC, Web.config files to download

 

 

under: 9534

Step 5. Create New Console Project for creating Client Application the Service – Start running the Service when you generate the Proxy of the Service

 

5.1- Added Service Reference of the created Service

5.2- Created Proxy Class of the created Service – In service explorer click on show all files then a set of files will be showing which are auto generated, the proxy class file is here Reference.cs

 

 5.3 This also generates the service binding details in App.config file

 

 5.3 Auto generated Binding Details of the service in App.config file

 

    <bindings>

      <basicHttpBinding>

        <binding name=”BasicHttpBinding_IMyFirstService” closeTimeout=”00:01:00″

          openTimeout=”00:01:00″ receiveTimeout=”00:10:00″ sendTimeout=”00:01:00″

          allowCookies=”false” bypassProxyOnLocal=”false” hostNameComparisonMode=”StrongWildcard”

          maxBufferSize=”65536″ maxBufferPoolSize=”524288″ maxReceivedMessageSize=”65536″

          messageEncoding=”Text” textEncoding=”utf-8″ transferMode=”Buffered”

          useDefaultWebProxy=”true”>

          <readerQuotas maxDepth=”32″ maxStringContentLength=”8192″ maxArrayLength=”16384″

            maxBytesPerRead=”4096″ maxNameTableCharCount=”16384″ />

          <security mode=”None”>

            <transport clientCredentialType=”None” proxyCredentialType=”None”

              realm=”” />

            <message clientCredentialType=”UserName” algorithmSuite=”Default” />

          </security>

        </binding>

      </basicHttpBinding>

    </bindings>

 

5.3 Auto generated End Point of the service in App.config file

 

    <client>

      <endpoint address=”http://abu:8080/WCFKolkataNET/HOL/MyService” binding=”basicHttpBinding”

        bindingConfiguration=”BasicHttpBinding_IMyFirstService” contract=”MyFirstServiceClient.IMyFirstService”

        name=”BasicHttpBinding_IMyFirstService” />

    </client>

5.4 Code in Prorgarm.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Runtime.Serialization;

using System.ServiceModel;

 

namespace KolkataNETWCFHelloWorld

{

    class Program

    {

        static void Main(string[] args)

        {

            EndpointAddress endPointAddr = new EndpointAddress(“http://abu:8080/WCFKolkataNET/HOL/MyService”);

            MyFirstServiceClient clientProxy = new MyFirstServiceClient(new BasicHttpBinding(), endPointAddr);

            string strResponse = clientProxy.MyFirstMethod();

 

            Console.WriteLine(string.Format(“Response from MyFirstService: {0}”, strResponse));

            Console.WriteLine();

            Console.ReadLine();

        }

    }

}

 Run the Client Application

 

under: 9534

Step 1. Created one Console Project

 

 

Step 2. Created one Project in the same Solution IMyFirstService.csproj for declaring/designing Service contact

 

2.1- Added reference to System.ServiceModel

using System;

using System.Runtime.Serialization;

using System.ServiceModel;

 

namespace KolkataNETWCFHelloWorld

{

    [ServiceContract(Namespace=”http://KolkataNET.WCF.HOL”)]

    public interface IMyFirstService

    {

        [OperationContract]

        string MyFirstMethod();

    }

}

2.2 Design Simple Service Contract with one

    [ServiceContract(Namespace=”http://KolkataNET.WCF.HOL”)]

    public interface IMyFirstService

 

2.3 Design Simple Operation [Method/Function] using Attribute [OperationContract] by declaring the method name MyFirstMethod

 

Step 3. Created one Project in the same Solution MyFirstService.csproj for declaring/designing Service

 

3.1- Added reference to System.ServiceModel

using System;

using System.Runtime.Serialization;

using System.ServiceModel;

 

namespace KolkataNETWCFHelloWorld

{

    public class MyFirstService : IMyFirstService

    {

        public string MyFirstMethod()

        {

            return string.Format(“Hello World. Welcome KolkataNET!!!”);

        }

    }

}

3.2 Design Simple Service implementing the above service Contract

    public class MyFirstService : IMyFirstService

 

3.3 Design Simple Operation [Method/Function]

    public class MyFirstService : IMyFirstService

    {

        public string MyFirstMethod()

        {

            return string.Format(“Hello World. Welcome KolkataNET!!!”);

        }

    }

 

Step 4. Modified the initial main Console Project to Self Host the Service

 

4.1- Added reference to System.ServiceModel – For hosting the service and exposing MEX – Metadata Exchange of the Service

using System;

using System.Runtime.Serialization;

using System.ServiceModel;

using System.ServiceModel.Description;

 

namespace KolkataNETWCFHelloWorld

{

    class Program

    {

        static void Main(string[] args)

        {

            Uri svcBaseAddress = new Uri(“http://abu:8080/WCFKolkataNET/HOL”);

            ServiceHost svcHost = new ServiceHost(typeof(MyFirstService), svcBaseAddress);

            svcHost.AddServiceEndpoint(

                               typeof(IMyFirstService),

                               new BasicHttpBinding(),

                               “MyService”);

            ServiceMetadataBehavior svcMetaBehav = new ServiceMetadataBehavior();

            svcMetaBehav.HttpGetEnabled = true;

            svcHost.Description.Behaviors.Add(svcMetaBehav);

            svcHost.Open();

            Console.WriteLine(“<ENTER> to stop the service – MyFirstService”);

            Console.WriteLine();

            Console.ReadLine();

            svcHost.Close();

        }

    }

}

4.2 Defining Base Address to host the Service

Uri svcBaseAddress = new Uri(“http://abu:8080/WCFKolkataNET/HOL”);

            ServiceHost svcHost = new ServiceHost(typeof(MyFirstService), svcBaseAddress);

            svcHost.AddServiceEndpoint(

                               typeof(IMyFirstService),

                               new BasicHttpBinding(),

                               “MyService”);

 

4.3 Allowing to expose MEX of the Service

            ServiceMetadataBehavior svcMetaBehav = new ServiceMetadataBehavior();

            svcMetaBehav.HttpGetEnabled = true;

            svcHost.Description.Behaviors.Add(svcMetaBehav);

 

4.3 Running the service until <ENTER> key has been pressed

svcHost.Open();

 

4.4 Closing the service when <ENTER> key has been pressed

svcHost.Close();

 

Running the Service – now we will create client to call it

 

under: 9534

Here is the code…

Click to Download

This is my first post for WCF HOL. I will be posting series of Lab Sessions with code and explanations for the whole series. I have noticed in one UG Session people who don’t have any WCF backround but who are familiars of ASP.NET/.NET for them this series will be useful as a tutorial with practical.

Step by step I will be covering all the possible aspects of WCF. Same time I will be covering the SOA / Service based real life application scope especially for Connected and Distributed systems.

Please note that in the sample application every where I have used abu – which is my machine name, now for your case this will be your machine name

In Service Code
Uri
svcBaseAddress = new Uri(http://abu:8080/WCFKolkataNET/HOL); // Change “abu” by your machine name

In Client Code
EndpointAddress
endPointAddr = new EndpointAddress(http://abu:8080/WCFKolkataNET/HOL/MyService); // Change “abu” by your machine name

under: 9534

Older Posts »

Categories