title: FaultException is not working correct when using BasicHttpBinding
body: <p>So, I noticed <code>FaultException</code> is not giving me the proper result when I use the <code>BasicHttpBinding</code>. When I use <code>WSHttpBinding</code> it works file.</p>
  
  <p>The issue is, From WCF Service if I throw the <code>FaultException</code> like below,</p>
  
  <pre><code>var translations = new List&lt;FaultReasonText&gt; { new FaultReasonText("FaultReasonText 1"), new FaultReasonText("FaultReasonText 2") };
  
  throw new FaultException&lt;MessageServiceFault&gt;(MessageServiceFault.Fault1, new FaultReason(translations));
  </code></pre>
  
  <p>When it reaches to the client the <code>fault.Reason.Translations</code> count is 1. That means the first one (<code>FaultReasonText 1</code>) only is getting back to client.</p>
  
  <p>But when I use <code>WSHttpBinding</code> the count is 2. Where the issue is? Can anyone help me on this.</p>
  
  <p>It gives me different result when I test the below code with <strong>BasicHttpBinding</strong> &amp;  <strong>WSHttpBinding</strong> bindings.</p>
  
  <pre><code>class Program
  {
      static void Main(string[] args)
      {
          try
          {
              string baseAddress = "http://" + Environment.MachineName + ":8000/Service";
              ServiceHost host = new ServiceHost(typeof(MessageService), new Uri(baseAddress));
              host.AddServiceEndpoint(typeof(IMessageService), new WSHttpBinding(), "");
              host.Open();
              Console.WriteLine("Host opened");
  
              ChannelFactory&lt;IMessageService&gt; myChannelFactory = new ChannelFactory&lt;IMessageService&gt;(new WSHttpBinding(), new EndpointAddress(baseAddress));
              IMessageService channel = myChannelFactory.CreateChannel();
              var response = channel.GetMessage();
          }
          catch (FaultException fault)
          {
              fault.Reason.Translations.ToList().ForEach(i =&gt; Console.WriteLine(i.Text));
              Console.WriteLine(false);
          }
      }
  }
  
  [ServiceContract]
  public interface IMessageService
  {
      [OperationContract]
      [FaultContract(typeof(MessageServiceFault))]
      string GetMessage();
  }
  
  public class MessageService : IMessageService
  {
      public string GetMessage()
      {
          var translations = new List&lt;FaultReasonText&gt; { new FaultReasonText("FaultReasonText 1"), new FaultReasonText("FaultReasonText 2") };
  
          throw new FaultException&lt;MessageServiceFault&gt;(MessageServiceFault.Fault1, new FaultReason(translations));
      }
  }
  
  [DataContract]
  public enum MessageServiceFault
  {
      [EnumMember]
      Fault1,
  
      [EnumMember]
      Fault2
  }
  </code></pre>
  
  <p><strong>EDIT</strong>: </p>
  
  <p>But, this <a href="http://blogs.msdn.com/b/drnick/archive/2006/12/14/creating-faults-part-2.aspx" rel="nofollow">article</a> says, You can supply a number of different text strings that get picked from depending on the user's language settings. The Translations bucket holds all of the different text strings and their associated cultural identifiers (tied together by a FaultReasonText). When no culture is specified for a fault reason or a translation search, the assumed culture is the current thread culture. For example, if you want a translation to "en-UK", we'll first look for "en-UK" and then we'll look for "en". If we still can't find a match, then we'll take the first translation in the list, which could be anything.</p>
  
  <p>If so, Why in case of <code>WsHttpBinding</code> it returns me the 2 <code>FaultReasonText</code> ?</p>