Reputation: 1463
I have an ordinary windows service that processes a large data set and stores it to a DB. This windows service also acts to host a WCF service that serves the processed data up to one or more GUIs.
Currently the WCF service has to hit the DB at least once to get the data for the client, but the size of the data set is such that this is extremely slow, and eats up a lot of memory because of the duplication of data. Ideally I would like to share the results of the data processing directly (in memory) with the WCF service. Is there a way to do this?
Upvotes: 0
Views: 1899
Reputation: 1463
Actually, a colleague of mine found it is possible to access the WCF Service from the host via static methods, and you don't even need to have the service in singleton mode.
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
public class MyWcfService : IMyWcfService
{
private static string messageFromHost;
public static void PassMessageFromHostToService(string message)
{
messageFromHost = message;
}
// Other methods fulfilling the service contract here...
}
From the host process you can then do this to call the method:
MyWcfService.PassMessageFromHostToService("I'm a message from your host");
I'm not sure if this is considered bad practice, or if it will cause any problems we haven't considered, but it seems to be working for me :)
Upvotes: 1
Reputation: 8645
Yes, using a distributed cache engine.
Basically, the distributed cache engine is a separate process running on one or more machines, that manages a cache. This cache sites in it's own process, and typically the cache engine provides an API for accessing that data
The main options are
Upvotes: 2
Reputation: 2017
Yes. You'll need to create your WCF host in singleton mode. See this related question.
Upvotes: 0