Project Description
An extensible, independent, configurable framework which allows querying for objects on other process domains by using LINQ.
Supports: querying and changing objects, lazy loading, authentication & authorization,.. . It's developed in c#,

Abstract
An extensible, independent, configurable framework is realized that allows sending typed request over process boundaries where the concrete request handlers are able to access business services to fulfill the requests.

Based on this framework, request handlers and services are written which allow querying for objects on other process domains by using LINQ. The handlers and services work fully transparent to the user.

The realized solution supports: lazy loading of data, authentication and authorization, query - define view of - read - save - reload of - delete - add objects, profile based services and handlers, loading of new handlers and services at runtime, conflict resolution, object caching for increasing performance and so on, whereas the communication technology WCF is supported so far.

Simple Usage

//create the server
IServer server = InterLinqServer.GetSebarfServerForInterLinq(queryHandler, backendProvider,
	  "RequestHandlerConfiguration.Server.Internal.xml",
	  "RequestHandlerConfiguration.Server.Application.xml",
                "net.tcp://localhost:9876/InterLinqService");
server.Start();

// create the interlinq client and connect to the server
IClient client;
ClientContext ctx;
IServiceLocatorService serviceLocator;

InterLinqClientFactory.CreateSebarfClientForInterlinq("RequestHandlerConfiguration.Client.xml",
             "LINQServicesFull.Profile.Server.xml",
             "LINQServicesFull.Profile.Client.xml",
             "Client with id:" + Guid.NewGuid(),
             "net.tcp://localhost:9876/InterLinqService", out client,
             out ctx, out serviceLocator);

// query objects on the client
// get all products and cars from the server
IQueryable<Person> persons = from p in ctx.GetData<Person>() select p;
IQueryable<Car> cars = from c in ctx.GetData<Car>() select c;

// get a generic view of cars and their owner
IEnumerable<CarsAndtheirOwnerView> typedResult = (from c in ctx.GetData<Car>()
	  join p in ctx.GetData<Person>() on c.OwnedByPerson equals p.Name
                select
	     new GenericView(
		new InternalData(c, "Name as CarName"),
	              new InternalData(p, "Name as PersonName"))).ToArray().
	  AsTypedCollectionOf<CarsAndtheirOwnerView>();

// save data
serviceLocator.GetRegisteredService<IChangeHandlerService>().SubmitChanges();

Extensibility
// do a new MultiplyRequest, let the server engine process this request
double resultOfMultiplyRequest =Convert.ToDouble(client.Process(new MultiplyRequest { Number1 = 100, Number2 = 200 })); // calculates 100*200 on the server

Project Team

Last edited Jun 16, 2009 at 7:07 PM by RaphaelGfeller, version 11