Advanced Design Issues
Because the type information of a remote type is required by the client, it is often easiest to simply deploy the remote type library on the client for use as a metadata library. However, in many cases you will not want any client to have access to the implementation of the type. There are a number of ways to solve this problem:
Build a solitary client using the Soapsuds tool (Soapsuds.exe) as described in the topic Solitary Clients. This works only with an HttpChannel object.
Deploy a metadata-only assembly on the client with the same name and type information as the server assembly, and disable version checking or leave versions blank.
Declare an interface in a separate library and deploy that library with the client. Publish a server class that implements your interface; the client will be able to use the class by acquiring a proxy to the interface that it implements.
Note The client will have to call the Activator.GetObject method to acquire the proxy. Calling new (New in Visual Basic) will throw a compile-time error; you cannot create an instance of an interface.
Build a remotable wrapper class for the real class. Publish and deploy the wrapper library. The client will have no access to the real object.