posts - 315, comments - 268, trackbacks - 15

My Links

News

View Pietro Libro's profile on LinkedIn

DomusDotNet
   DomusDotNet

Pietro Libro

Tag Cloud

Article Categories

Archives

Post Categories

Blogs amici

Links

WCF + POCO Proxies

 

Quando si utilizza WCF insieme ad EF 4.0 e le classi POCO, può accadere che durante il “trasferimento” (serializzazione) degli oggetti venga visualizzata la seguente eccezione:

image

in forma descrittiva:

Failed to invoke the service. Possible causes: The service is offline or inaccessible; the client-side configuration does not match the proxy; the existing proxy is invalid. Refer to the stack trace for more detail. You can try to recover by starting a new proxy, restoring to default configuration, or refreshing the service.

Per risolvere il problema è sufficiente aggiungere la classe seguente, recuperata da msdn, che costituisce un attributo personalizzato da aggiungere ai vari attributi [OperationContract] :

   1:   public class ApplyDataContractResolverAttribute : Attribute, IOperationBehavior
   2:      {
   3:          public ApplyDataContractResolverAttribute() { }
   4:   
   5:          public void AddBindingParameters(OperationDescription description, BindingParameterCollection parameters) {}
   6:   
   7:          public void ApplyClientBehavior(OperationDescription description, System.ServiceModel.Dispatcher.ClientOperation proxy)
   8:          {
   9:              DataContractSerializerOperationBehavior dataContractSerializerOperationBehavior =
  10:                  description.Behaviors.Find<DataContractSerializerOperationBehavior>();
  11:              dataContractSerializerOperationBehavior.DataContractResolver =
  12:                  new ProxyDataContractResolver();
  13:          }
  14:   
  15:          public void ApplyDispatchBehavior(OperationDescription description, System.ServiceModel.Dispatcher.DispatchOperation dispatch)
  16:          {
  17:              DataContractSerializerOperationBehavior dataContractSerializerOperationBehavior =
  18:                  description.Behaviors.Find<DataContractSerializerOperationBehavior>();
  19:              dataContractSerializerOperationBehavior.DataContractResolver =
  20:                  new ProxyDataContractResolver();
  21:          }
  22:   
  23:          public void Validate(OperationDescription description)
  24:          {
  25:              // Do validation.
  26:          }
  27:      }

Quindi, nell’interfaccia che descrive il nostro servizio, avremo qualcosa di questo tipo:

   1:  [OperationContract]
   2:  [ApplyDataContractResolver]
   3:  bool Fuction1(POCOObject o);

Risolvendo il problema dell’eccezione. Lo stesso risultato può essere ottenuto disabilitando la creazione delle classi Proxy nella classe derivata da ObjectContext, impostando la proprietà ContextOptions.ProxyCreationEnabled a False.

Purtroppo non ho il tempo di approfondire l’argomento in questo post, ma è possibile trovare maggiori informazioni sull’argomento qui

Print | posted on mercoledì 7 aprile 2010 18:12 | Filed Under [ WCF Entity Framework 4 ]

Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET