Options for getting remote offices to work against a single database
I realise that this is not really the type of question that should be asked on this forum, since it does not have a single answer, but stack overflow has been such an awesome resource in the past that I hope you will forgive me this one time.
Our problem is as follows: We have a product, which is a relative straight-forward windows forms application that provide typical data-entry and searching capabilities onto a database. We have a client with offices in London and Hong Kong and they want to share the data between the offices. Previously they have accomplished this using a single server in London and using Citrix or Remote desktop to run against that databae.
The users in Hong Kong complain (rightly so) about the speed of this solution. We have some competitors that apparently have this cracked, so we need to come up with a solution very quickly or possibly lose the client.
I am, unfortunately, not very experienced with distributed solutions. I can only think of two options.
Install a Sql-server in Hong Kong with merge replication between the two servers and run the desktop client against the new server. My main problem with this is that other people in the company have only horror stories when it comes to SQL merge replication. Their experience is a bit dated, so does anyone know how easy it is to set up and maintain in the newer versions.
The second option I see is to create WCF services that sit in Hong Kong and connect to the London system, allowing for caching of large amounts of data, hopefully resulting in acceptable performance. The main problem here is that it is a legacy product that currently talks directly to the database. This means that I will first have to introduce a service layer, which will be a lot of work. This will of course be good for the product anyway, but I am hesitant to suggest this solution if I am not even sure how well it will work and what the performance will be at the end of the day.
Does anyone have any advice to offer? Some other options that I am not aware of? Or maybe people who went down the one route and had to swap to the other for some or other reason?
I realise this is very vague, but any help will be appreciated.
Time to move to the cloud. You could use SQL Azure and Windows Azure and put a web front end on it. That would take away the complexity you're describing (in terms of adding DB synchronization). This would also reduce costs involved with adding additional infrastructure for another server and make the app accessible to anyone with a web browser.
Also, this solution would give you flexibility in terms of adding or removing necessary hardware in order to increase performance.
Without knowing details of the aforementioned app, this vague suggestion is all I can offer ;)