5,276,406 members and growing! (17,413 online)
Email Password   helpLost your password?
Platforms, Frameworks & Libraries » Windows Communication Foundation » General     Advanced License: The Code Project Open License (CPOL)

Integrating WCF Services

By taufufah

This article describes how WCF services can be loaded on-the-fly (without prior knowledge of the services’ contracts), setting its parameters and sequencing their invocation.
C# (C# 3.0, C#), Windows, Win32, Visual Studio (VS, VS2005), WCF, WinForms, Design, Arch, Dev

Posted: 24 Apr 2008
Updated: 24 Apr 2008
Views: 3,459
Announcements
Want a new Job?



Search    
Advanced Search
Sitemap
7 votes for this Article.
Popularity: 4.04 Rating: 4.79 out of 5
0 votes, 0.0%
1
0 votes, 0.0%
2
0 votes, 0.0%
3
2 votes, 28.6%
4
5 votes, 71.4%
5
Note: This is an unedited contribution. If this article is inappropriate, needs attention or copies someone else's work without reference then please Report This Article

Introduction

The basic concept that this article is trying to present is how to subscribe to WCF services on-the-fly without prior knowledge of the services’ contract definitions. Once these services are loaded, user could then select desired operations from these services to be invoked sequentially through a simple sequencer. User could also set value for any parameters of a certain operation. With such concept, services located independently at different locations could be integrated to form a larger scale solution.

Please note that this article is just trying to illustrate a basic possibility of working with WCF services. Many more advanced possibilities are omitted from the article and are suggested in Todo section below.

Credits

The sample project made references to the following great works:

Dynamic Programming with WCF by Vipul ModiA General Fast Method Invoker by Luyan

Using the code

The concept is really pretty simple. There are services hosted somewhere ready to be subscribed. These are just ordinary WCF services. The client application can load these services by requiring user to key in the desired service’s URL. For the sample project, a service called ExampleService is hosted at the following URL.

http://localhost:8080/WcfSamples/DynamicProxy

public class ExampleService : IWorkWithIntrinsic
{
    #region IWorkWithIntrinsic Members

    public void WorkWithIntegers(int first, int second)
    {
        Console.WriteLine("IWorkWithIntrinsic.WorkWithIntegers was called.");
        Console.WriteLine("\t1st Integer: " + first);
        Console.WriteLine("\t2nd Integer: " + second);
    }

    public string WorkWithString(string myString)
    {
        Console.WriteLine("IWorkWithIntrinsic.WorkWithString was called.");
        Console.WriteLine("\tString: " + myString);
        return myString + " returned from server.";
    }

    public double WorkWithDouble(double myDouble)
    {
        Console.WriteLine("IWorkWithIntrinsic.WorkWithDouble was called.");
        Console.WriteLine("\tDouble: " + myDouble);
        return myDouble + 1.0;
    }

    #endregion
}
           

User could load (subscribe) a service by going for File, Load Service. The following dialog box will greet the user. User should check the Load All Contracts check box and click Ok.

loadservice.JPG

All loaded services (proxies) will appear in a tree view. User can then choose desired operations to be added to the sequencer by performing a right click on the operation node and choose Add Operation. This is shown in the following diagram.

addoperations.JPG

Finally, user can click on the Play button to execute all selected operations.

integrator.JPG


The following screen shot depicts the sequence of events that have taken place on the server side.

server.JPG

Brief Description of Each Projects in the Solution

Integrator.Framework.DynamicProxyModel – A project that made dynamic proxy creation possible. Almost everything here are taken from the great works by Vipul Modi as described above.

Integrator.Framework.ServiceManagerModel – A project that manages all loaded proxies and its operations and parameters.

Integrator.Framework.Sequencer – Consists of the sequencer component.

Integrator.Framework.TestServer – Service Host Application.

Integrator.UI.Shell – CAB Shell that host all UI components.

Integrator.UI.Sequencer – UI that host the sequencer.

Integrator.UI.LoadedServices – UI that host all loaded proxies.

Integrator.UI.ParameterEditor – UI that host the parameter editor.

Integrator.UI.Common – Consists of constants and event arguments for all UI components.

Running the Sample Projects

Set Integrator.Framework.TestServer as active project and execute it by pressing Alt-F5 from Visual Studio 2005.

Set Integrator.UI.Shell as active project and execute the project by pressing F5 from Visual Studio 2005. Perform the steps as described in Description on Basic Concept section above.

Todo

The following items are planned features for the project that I can’t find time to get them implemented.

Event Broker System – to work with the sequencer in order to construct a Publish\Subscribe model. The idea is, once an operation is completed, its return parameter can be used as input parameter to another operation.

Handling complex parameters - currently, code to handle complex parameter have been included but only half-baked.

Serving UI - Having the service to serve its own UI (possibly XAML).

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

taufufah


Yes, I design. Then, I code. Next, I refactor.
Occupation: Software Developer (Senior)
Location: Malaysia Malaysia

Other popular Windows Communication Foundation articles:

Article Top
Sign Up to vote for this article
You must Sign In to use this message board.
FAQ FAQ Noise ToleranceSearch Search Messages 
 Layout  Per page   
 Msgs 1 to 2 of 2 (Total in Forum: 2) (Refresh)FirstPrevNext
Subject  Author Date 
GeneralSupport for .NET 3.5 and ISBmemberChristian Weyer5:29 25 Apr '08  
GeneralRe: Support for .NET 3.5 and ISBmembertaufufah6:03 26 Apr '08  

General General    News News    Question Question    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

PermaLink | Privacy | Terms of Use
Last Updated: 24 Apr 2008
Editor:
Copyright 2008 by taufufah
Everything else Copyright © CodeProject, 1999-2008
Web13 | Advertise on the Code Project