title: How to make sure you don't get WCF Faulted state exception?
body: <p>I am getting this exception: </p>
  
  <blockquote>
    <p><em>The communication object,
    System.ServiceModel.Channels.ServiceChannel,
    cannot be used for communication
    because it is in the Faulted state.</em></p>
  </blockquote>
  
  <p>The WCF service uses the default wsHttpBinding. I am using WCF in the following way wherever I am using it:</p>
  
  <pre><code>using (var proxy = new CAGDashboardServiceClient())
  {
      proxy.Open();
      var result = proxy.GetSiteForRegion(ddlRegions.SelectedValue);
      ddlSites.DataSource = result;
      ddlSites.DataBind();
      proxy.Close();
  }
  </code></pre>
  
  <p>The error line shown in the message seems to be after last proxy.close. Not sure what is going on. I am launching the service from within visual studio 08.</p>
  
  <p>Here is the trace information:</p>
  
  <pre class="lang-none prettyprint-override"><code>The communication object, System.ServiceModel.Channels.ServiceChannel, cannot be used for communication because it is in the Faulted state.
  
  Server stack trace: 
    at System.ServiceModel.Channels.CommunicationObject.Close(TimeSpan timeout)
  
  Exception rethrown at [0]: 
    at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
    at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData&amp; msgData, Int32 type)
    at System.ServiceModel.ICommunicationObject.Close(TimeSpan timeout)
    at System.ServiceModel.ClientBase`1.System.ServiceModel.ICommunicationObject.Close(TimeSpan timeout)
    at System.ServiceModel.ClientBase`1.Close()
    at System.ServiceModel.ClientBase`1.System.IDisposable.Dispose()
    at CAGDashboard.UserControls.ucVolunteerCRUDGrid.ddlRegions_SelectedIndexChanged(Object sender, EventArgs e) in C:\Documents and Settings\rballalx\My Documents\Visual Studio 2008\Projects\DashboardCAG\CAGDashboard\UserControls\ucVolunteerCRUDGrid.ascx.cs:line 81
    at System.Web.UI.WebControls.ListControl.OnSelectedIndexChanged(EventArgs e)
    at System.Web.UI.WebControls.DropDownList.RaisePostDataChangedEvent()
    at System.Web.UI.WebControls.DropDownList.System.Web.UI.IPostBackDataHandler.RaisePostDataChangedEvent()
    at System.Web.UI.Page.RaiseChangedEvents()
    at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
  </code></pre>