Při použití CAO (Client Activated) objektu nebo při vrácení MarshalByRefObjectu ze SAO (Server Activated) objektu fungují volání metod jen v lokální síti. Na počítači přistupujícím přes internet (a komunikujícím tedy většinou přes adresu firewallu/routeru) volání metody vzdáleného CAO objektu vždy selže.
Důvodem je, že každý CAO objekt je identifikován unikátním dynamickým URI, které je vygenerováno na serveru. Server za firewallem/routerem ale vrátí název počítače nebo IP adresu (v závislosti na nastavení vlastnosti useIpAddress u přenosového kanálu), které jsou platné pouze v lokální síti. Nastavením vlastnosti machineName u kanálu můžeme zadat, jaký název serveru (IP adresa) mají být v URI pro CAO objekty vráceny - zadáme tedy externí a pro klienty viditelnou adresu (např. adresu firewallu).
V Konfiguračním souboru
<channel ref="tcp" machineName="serverExternalVisibleName">
</channel>
V kódu: IDictionary properties = new Hashtable();
properties["machineName"] = "serverExternalVisibleName";
TcpChannel tcpChannel = new TcpChannel(properties, null, null);
ChannelServices.RegisterChannel(tcpChannel);
Při komunikaci se serverovým objektem dostanete hlášení, že selhalo přihlášení k proxy (The remote server returned an error: (407) Proxy Authentication Required).
Net Remoting podporuje přihlášení k webovému serveru, ale jeho autoři trestuhodně a pravděpodobně omylem (ale i ve verzi 2.0?) nezveřejnili pro zadání přihlašovacích údajů objekt IWebProxy. Jediným nepříliš čistým řešením (pomineme-li nespolehlivé zadání autentizačních údajů přes třídu GlobalProxySelection) je použití reflection a nastavení privátního člena _proxyObject v objektu HttpClientChannel.
//Vytvoření nového http komunikačního kanálu
HttpChannel channel = new HttpChannel();
//Získáme deskriptor člena _clientChannel (klientský http kanál) ve třídě HttpChannel
FieldInfo clientChannelFO = typeof(HttpChannel).GetField("_clientChannel", BindingFlags.Instance|BindingFlags.NonPublic);
//Získání instance HttpClientChannel
HttpClientChannel clientChannel = clientChannelFO.GetValue(channel);
//Získání deskriptoru proxy objektu
FieldInfo proxyObject = typeof(HttpClientChannel).GetField("_proxyObject", BindingFlags.Instance | BindingFlags.NonPublic);
//Vytvoření nového proxy objektu
IWebProxy authProxy = new WebProxy("proxy", 80);
//Pro autentizaci k proxy použijeme údaje přihlášeného uživatele
authProxy.UseDefaultCredentials = true;
//Nastavení nové proxy v objektu HttpClientChannel
proxyObject.SetValue( clientChannel, proxy );