Да, клиент должен иметь ссылку на сборку, содержащую информацию о типе удаленного класса.Стандартная практика заключается в создании отдельной сборки, которая содержит только интерфейс для удаленного класса.И клиент, и сервер ссылаются на сборку.Сервер содержит реализацию для удаленного класса, но клиент видит только интерфейс.
Причина, по которой клиент создает экземпляр удаленного объекта на сервере, связана с записями, содержащимися в файле app.config.
<configuration>
<system.runtime.remoting>
<application>
<client
url = "http://www.cpandl.com"
displayName="MyApplication"
>
<activated
type = "myClientActivatedType,myAssembly"
/>
</client>
</application>
</system.runtime.remoting>
</configuration>
Ключевой информацией здесь является тег <activated>
.См. статью для получения дополнительной информации.