While I'm not entirely sure I understand the question, I'll offer this explanation:
In order for remoting to function, you need to have the remoted objects available at both ends of the communications. If the objects you are remoting live in your server layer dll, then yes, you need to have that server layer DLL wherever the UI is calling it. The difference is that the code in the actual server layer DLL at the UI end is not executing. It's executing at the server, thru the remoting channel. However, the UI is using the server layer DLL as the reference for the class definitions.
Often, this kind of scenario is simplified by creating an assembly of very simple classes, or even just of interfaces. The types that are remoted are the interfaces themselves instead of the classes that implement those interfaces. This benefits you two-fold: A) you don't need to distribute your logic in an assembly just so the consumer (UI in your case) has it for the necessary reference, and also B) by exposing interfaces as the remoted object, you can much more easily change the actual class that is instantiated without breaking the consumers of the remoted objects.
-
Peter