title: MissingMethodException when making a .NET Remoting call over IPC
body: <p>I have a service which needs to pump strings to a helper application which displays critical messages from the service to the user (Vista+ does not give services access to the GUI). Since I've used .NET Remoting over TCP, I figured I'd do the same with the IPC protocol. However, after getting the reference to the remote object, I get the following exception when making a call to the remote method:</p>
  
  <pre><code>MissingMethodException: No parameterless constructor defined for this object.
  </code></pre>
  
  <p>Simply adding a parameterless constructor to the class gives me a NullReferenceException when making the call instead. What is it that I am doing wrong? I've included my relevant code below:</p>
  
  <p>Application Code</p>
  
  <pre><code>public class MyMsgBus : MarshalByRefObject, IDisposable, IMxServeBus
  {
      private Thread myThread = null;
      private volatile List&lt;string&gt; myMsgBus = null;
      private volatile bool myThreadAlive = false;
      private volatile bool myIsDisposed = false;
      private volatile bool myIsDisposing = false;
      private IpcChannel myIpc = null;
  
      public MyMsgBus(string busname)
      {
         myMsgBus = new List&lt;string&gt;();
  
         myIpc = CreateIpcChannel(busname);
         ChannelServices.RegisterChannel(myIpc);
  
         var entry = new WellKnownServiceTypeEntry(
            typeof(MxServeBus),
            "MyRemoteObj.rem",
            WellKnownObjectMode.Singleton);
  
         RemotingConfiguration.RegisterWellKnownServiceType(entry);
      }
  
      // defined in IMyMsgBus
      public void SendMessage(string message)
      {
         // do stuff
      }
  
      public static IpcChannel CreateIpcChannel(string portName)
      {
         var serverSinkProvider = new BinaryServerFormatterSinkProvider();
         serverSinkProvider.TypeFilterLevel = TypeFilterLevel.Low;
  
         IDictionary props = new Hashtable();
         props["portName"] = portName;
         props["authorizedGroup"] = "Authenticated Users";
  
         return new IpcChannel(props, null, serverSinkProvider);
      }
  
      public static IpcChannel CreateIpcChannelWithUniquePortName()
      {
         return CreateIpcChannel(Guid.NewGuid().ToString());
      }
  }
  </code></pre>
  
  <p>Test Client</p>
  
  <pre><code>static void Main(string[] args)
  {
     var channel = MyMsgBus.CreateIpcChannelWithUniquePortName();
     ChannelServices.RegisterChannel(channel, true);
  
     var objUri = "ipc://MyMsgBus/MyRemoteObj.rem";
     IMyMsgBus lBus = (IMyMsgBus)Activator.GetObject(typeof(IMyMsgBus), objUri);
     lBus.SendMessage("test");
     Console.WriteLine();
  }
  </code></pre>
  
  <p>Thanks in advance for any assistance on this. As an FYI, this is a remoting instance configured through the use of a shared interface, where IMyMsgBus defines the methods which should be available to call over IPC.</p>