title: System.ServiceModel.Channels.ReceivedFault causing SerializationException in IIS hosted WCF call
body: <p>I've got a service call in an IIS hosted WCF service that is calling into another WCF service in the same IIS instance through HTTP.  Normally, if the second service returns a FaultException, this is forwarded on to the caller of the first service.  Just recently, however, the iis service is occasionally shutting down after receiving a serialization exception.</p>
  
  <pre><code>Type 'System.ServiceModel.Channels.ReceivedFault' in Assembly 'System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' is not marked as serializable.
  
  System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(System.RuntimeType)
      System.Runtime.Serialization.FormatterServices.GetSerializableMembers(System.Type, System.Runtime.Serialization.StreamingContext)
      System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo()
      System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(System.Object, System.Runtime.Serialization.ISurrogateSelector, System.Runtime.Serialization.StreamingContext, System.Runtime.Serialization.Formatters.Binary.SerObjectInfoInit, System.Runtime.Serialization.IFormatterConverter, System.Runtime.Serialization.Formatters.Binary.ObjectWriter, System.Runtime.Serialization.SerializationBinder)
      System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Write(System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo, System.Runtime.Serialization.Formatters.Binary.NameInfo, System.Runtime.Serialization.Formatters.Binary.NameInfo)
      System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(System.Object, System.Runtime.Remoting.Messaging.Header[], System.Runtime.Serialization.Formatters.Binary.__BinaryWriter, Boolean)
      System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(System.IO.Stream, System.Object, System.Runtime.Remoting.Messaging.Header[], Boolean)
      System.Runtime.Remoting.Channels.CrossAppDomainSerializer.SerializeObject(System.Object, System.IO.MemoryStream)
      System.AppDomain.Serialize(System.Object) 
     System.AppDomain.MarshalObject(System.Object) 
  </code></pre>
  
  <p>The IIS application only has a single appdomain, so I'm not sure where this CrossAppDomainSerializer is coming into play.</p>