I don't have the hardware setup to actually test this, but looking at your code and your config files, it looks like in both cases a local instance of the dtc object is created. One way that you can verify this is to run it locally, as when it seemed to be working, and then call
RemotingServices.IsTransparentProxy on the dtc object. If RemotingServices.IsTransparentProxy returns false, the instance is local.
The main problem that I see is that you're configuring a server-activated object, but then attempting to create the object with a non-default constructor. Check out the MSDN article
Server Activation for more details. In particular, from the first paragraph:
"Only a proxy is created in the client application domain when a client requests an instance of a server-activated type. However, this also means that only default constructors are allowed for server-activated types when you use the default implementations. To publish a type whose instances will be created with specific constructors that take arguments, you can use client activation or you can dynamically publish your particular instance."Since you were configuring your object to be a server activated singleton, I'm guessing that changing to client activation is not going to work for you since this could enable multiple instances on the server. I think your best option will be to create the dtc object on the server and then publish it via
RemotingServices.Marshal. If you really want server activation but with the ability to pass constructor parameters from the client, another option would be to create a singleton server activated dtc factory object, get a reference to that from the client, then call a factory method on this object with your parameters to get your remote dtc objects.
Also, one other little suggestion ... since you've created the IDtc interface and have built it in a shared assembly, I suggest moving the dtc implementation class to the server assembly, then making all calls to the dtc object through an interface reference on the client. That way you can update the implementation on the server if you want to without having to redistribute an updated shared assembly to the client.
Hope this helps.
- Elton