I have an Entity Framework data model. Part of the model is a Customer entity. The web service provides a method to get a customer, and to receive an updated version of this customer to be persisted.
To test this, I created a new ASP.NET web Application, (Solution > Add > New Project > ASP.NET Web Application), then added a reference to my service reference using the standard Add Service Reference dialog. I then call the service using the following code:
var client = new CustomerServiceClient();
var customer = client.GetCustomerByID(18); // get it
customer.LimitDown = 100; // change it
client.SaveCustomer(customer); // persist it
Everything works as expected.
Now, I do exactly the same thing, but this time with as ASP.NET Web Site (Solution > Add > New Web Site > ASP.NET Web Site). I add the reference in a similar fashion and copy and paste the code above into the new site. But now I get the following exception thrown on the 4th line:
System.InvalidOperationException The
EntityReference object could not be
serialized. This type of object cannot
be serialized when the
RelationshipManager belongs to an
entity object that does not implement
IEntityWithRelationships.Source Error:
Line 2474: Line 2475:
public
SkyWalkerCustomerService.OperationResult
SaveCustomer(SkyWalkerCustomerService.Customer
customer) { Line 2476:
return
base.Channel.SaveCustomer(customer);
Line 2477: } Line 2478: }Stack Trace:
System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage
reqMsg, IMessage retMsg) +9475203
System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData&
msgData, Int32 type) +345
SkyWalkerCustomerService.ICustomerService.SaveCustomer(Customer
customer) +0
SkyWalkerCustomerService.CustomerServiceClient.SaveCustomer(Customer
customer) in
c:\Windows\Microsoft.NET\Framework\v4.0.30128\Temporary
ASP.NET
Files\testsite2\dd2bcf8d\f95604ff\App_WebReferences.fz4h7x7l.0.cs:2476
_Default.Page_Load(Object sender, EventArgs e) in
c:\Users\Mike\Documents\Repositories\UWC\SkyWalker\TestSite2\Default.aspx.cs:17
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr
fp, Object o, Object t, EventArgs e)
+14 System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object
sender, EventArgs e) +35
System.Web.UI.Control.OnLoad(EventArgs
e) +91
System.Web.UI.Control.LoadRecursive()
+61 System.Web.UI.Page.ProcessRequestMain(Boolean
includeStagesBeforeAsyncPoint, Boolean
includeStagesAfterAsyncPoint) +1966
Googling for this error returns very little. Why doesn’t this work?
I guess one answer would be to use a web application instead of a web site, but I have an large existing site to which I need to add the service reference, and I’d rather not convert it.
Temporary workaround – I changed the .NET Framework version of the web site to 3.5, and now it works correctly. This is fine for my project, but I’d like to know for future reference why the original problem occurred.