Comment vous assurer que vous ne recevez pas WCF Faulted exception de l'État?
-
22-08-2019 - |
Question
Je reçois cette exception:
L'objet de communication, System.ServiceModel.Channels.ServiceChannel, ne peut pas être utilisé pour la communication car il est dans l'état Faulted.
Le service WCF utilise le wsHttpBinding par défaut. J'utilise WCF de la façon suivante où je l'utilise:
using (var proxy = new CAGDashboardServiceClient())
{
proxy.Open();
var result = proxy.GetSiteForRegion(ddlRegions.SelectedValue);
ddlSites.DataSource = result;
ddlSites.DataBind();
proxy.Close();
}
La ligne d'erreur affiché dans le message semble être après la dernière proxy.close. Pas sûr de ce qui se passe. Je lance le service à partir de Visual Studio 08.
Voici les informations de trace:
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& 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)
Autres conseils
Mise à jour :
Original post
Ceci est la méthode recommandée de Microsoft pour gérer les appels des clients WCF:
Pour plus de détails, voir: Exceptions prévues
try
{
...
double result = client.Add(value1, value2);
...
client.Close();
}
catch (TimeoutException exception)
{
Console.WriteLine("Got {0}", exception.GetType());
client.Abort();
}
catch (CommunicationException exception)
{
Console.WriteLine("Got {0}", exception.GetType());
client.Abort();
}
Informations complémentaires
Beaucoup de gens semblent poser cette question sur WCF que Microsoft a même créé un échantillon dédié pour montrer comment gérer les exceptions:
c: \ WF_WCF_Samples \ WCF \ base \ Client \ ExpectedExceptions \ CS \ client
Télécharger l'échantillon: C # ou VB
Considérant qu'il ya tant de problèmes impliquant l'instruction à l'aide , (chauffée?) Les discussions internes et
Si le mode de transfert est Buffered puis assurez-vous que les valeurs de MaxReceivedMessageSize et MaxBufferSize même . Je viens résolu le problème de l'Etat faillé cette façon après grappling avec elle pendant des heures et je pensais que je posterai ici si cela aide quelqu'un.
Cette erreur peut aussi être causée par des méthodes ayant zéro marqués avec l'attribut OperationContract. Ce fut mon problème lors de la construction d'un nouveau service et tester un long chemin.
Dans le même à la réponse de Ryan Rodemoyer, j'ai trouvé que lorsque le UriTemplate sur le contrat n'est pas valide, vous pouvez obtenir cette erreur. Dans mon cas, j'utilisais le même paramètre deux fois. Par exemple:
/Root/{Name}/{Name}