Friday, September 28, 2012

WCF Data Service: Error processing request stream. The property name Discount specified for type Order is not valid.

For a project we are using  a WCF Data Service. By using “Add service reference” we generated all the classes and a context on the client side. To simplify the usage of these classes, we want to extend some of them with some extra properties, e.g:
public partial class Order
{ 
 public int Discount
 { 
     get 
     { 
         return CalculateDiscount();
     } 
 } 
} 
After setting this up, we couldn’t no longer send updates to the server, instead we always got the following error message back:  "Error processing request stream. The property name 'Discount' specified for type 'Order' is not valid."
How can we tell WCF Data Service to ignore this property?
On the server side, doing this is easy. There is an IgnoreProperties attribute class that you can use to control the visibility of a property in a WCF DataService class. But this one is meant to be used on the server side not the client side.

But with some extra code, you can get the same thing done on the client side. Create a partial class for the Context and add the following:

partial void OnContextCreated() 
{ 
 this.WritingEntity += OnWritingEntity; 
} 
 
private void OnWritingEntity(object sender, System.Data.Services.Client.ReadingWritingEntityEventArgs e) 
{  
 foreach (XElement node in e.Data.Elements()) 
 { 
  if (node != null && node.Name.LocalName == "content") 
  { 
   foreach (XElement el in node.Elements()) 
   { 
    if (el.Name.LocalName == "properties") 
    { 
     foreach (XElement prop in el.Elements()) 
     { 
      if(prop.Name.LocalName=="Discount") 
      { 
       prop.Remove(); 
      } 
     } 
    } 
   } 
  } 
 } 
} 


 

1 comment:

dhasharath said...




Hi there, awesome site. I thought the topics you posted on were very interesting. I tried to add your RSS to my feed reader and it a few. take a look at it, hopefully I can add you and follow.

















Form Processing Services