wcf exception wcf-client

¿Cómo asegurarse de no obtener la excepción de estado fallado de WCF?



exception wcf-client (5)

De forma similar a la respuesta de Ryan Rodemoyer, descubrí que cuando UriTemplate en el Contrato no es válido, puede obtener este error. En mi caso, estaba usando el mismo parámetro dos veces. Por ejemplo:

/Root/{Name}/{Name}

Estoy recibiendo esta excepción:

El objeto de comunicación, System.ServiceModel.Channels.ServiceChannel, no puede utilizarse para la comunicación porque está en estado Faulted.

El servicio WCF usa el wsHttpBinding predeterminado. Estoy usando WCF de la siguiente manera donde sea que lo esté usando:

using (var proxy = new CAGDashboardServiceClient()) { proxy.Open(); var result = proxy.GetSiteForRegion(ddlRegions.SelectedValue); ddlSites.DataSource = result; ddlSites.DataBind(); proxy.Close(); }

La línea de error que se muestra en el mensaje parece estar después del último proxy.close. No estoy seguro de lo que está pasando. Estoy lanzando el servicio desde visual studio 08.

Aquí está la información de rastreo:

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)


Este error también puede ser causado por tener cero métodos etiquetados con el atributo OperationContract. Este fue mi problema cuando construí un nuevo servicio y lo probé por mucho tiempo.


Si el modo de transferencia está en Buffered , asegúrese de que los valores de MaxReceivedMessageSize y MaxBufferSize sean los mismos . Acabo de resolver el problema del estado fallado de esta manera después de lidiar con él durante horas y pensé que lo publicaría aquí si ayuda a alguien.



Actualización :

Esta respuesta vinculada describe una forma más simple y más clara de hacer lo mismo con la sintaxis de C #.

Publicación original

Esta es la forma recomendada por Microsoft para manejar llamadas de clientes WCF:

Para obtener más detalles, consulte: Excepciones esperadas

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(); }

Información Adicional

Muchas personas parecen estar haciendo esta pregunta en WCF que Microsoft incluso creó una muestra dedicada para demostrar cómo manejar las excepciones:

c: / WF_WCF_Samples / WCF / Basic / Client / ExpectedExceptions / CS / client

Descargue la muestra: C# o VB

Teniendo en cuenta que hay tantos problemas que involucran el uso de la declaración , (acalorado?) Las discusiones internas y los threads sobre este tema, no voy a perder el tiempo tratando de convertirme en un código vaquero y encontrar una manera más limpia. Simplemente lo absorberé, e implementaré los clientes de WCF de esta forma detallada (aunque de confianza) para mis aplicaciones de servidor.