title: What is System.ServiceModel.Diagnostics.CallbackException and why can't I handle it?
body: <p>In my WCF client class I'm handling the <code>Faulted()</code> event so that if the remote service throws an exception and faults the channel I can still at least shut it down gracefully. Here's my code:</p>
  
  <pre><code>protected void RemoteDataRetriever_Faulted(object sender, EventArgs e)
  {
      (sender as ICommunicationObject).Abort();
      this.Dispose();
      throw new ChannelTerminatedException("The remote service threw an unhandled exception and as a result the channel has been closed.");
  }
  </code></pre>
  
  <p>So what I would expect is that the client can handle the <code>ChannelTerminatedException</code> that I've thrown manually and send a message to the user, etc. Instead my exception is getting wrapped in a <code>System.ServiceModel.Diagnostics.CallbackException</code>. Ok, fine. Except here's the catch: this CallbackException doesn't exist in the ServiceModel library and there appears to be no way for me to handle it except as a generic <code>Exception</code>, which does me no good for my unit tests. What the heck is going on here? Can I disable that somehow and throw the exception that I originally wanted?</p>