2010-03-22 1 views
3

J'ai un modèle de données Entity Framework. Une partie du modèle est une entité client. Le service Web fournit une méthode pour obtenir un client et pour recevoir une version mise à jour de ce client à persister. Pour tester cela, j'ai créé un nouveau site Web ASP.NET Application, (Solution> Ajouter> Nouveau projet> Application Web ASP.NET), puis ajouté une référence à ma référence de service à l'aide de la boîte de dialogue standard Ajouter une référence de service . J'appelle alors le service en utilisant le code suivant:"L'objet EntityReference n'a pas pu être sérialisé" lors de la sérialisation à partir d'un site Web ASP.NET, mais fonctionne correctement sur une application Web ASP.NET

var client = new CustomerServiceClient(); 
var customer = client.GetCustomerByID(18); // get it 
customer.LimitDown = 100; // change it 
client.SaveCustomer(customer); // persist it 

Tout fonctionne comme prévu.

Maintenant, je fais exactement la même chose, mais cette fois avec ASP.NET Web Site (Solution> Ajouter> Nouveau site Web> Site Web ASP.NET). J'ajoute la référence d'une manière similaire et copiez et collez le code ci-dessus dans le nouveau site. Mais maintenant je reçois l'exception suivante lancée sur la 4ème ligne:

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

La recherche de cette erreur retourne très peu. Pourquoi ça ne marche pas? Je suppose qu'une réponse serait d'utiliser une application web au lieu d'un site Web, mais j'ai un grand site existant auquel j'ai besoin d'ajouter la référence du service, et je préfère ne pas le convertir.

+0

Avez-vous vérifié votre configuration de référence de service pour vous assurer que vous réutilisez la bibliothèque d'assemblage de référence? Cette erreur peut être due à la différence entre l'objet Customer généré à partir de MetatData de la référence de service et non l'objet client "réel" (c'est-à-dire l'objet de modèle d'entité). –

+0

Par défaut, la case "Réutiliser les types dans les assemblages référencés" est cochée, et je n'ai pas changé cela dans ma référence. MAIS, l'assemblage contenant mon objet client EF n'est de toute façon pas partagé - il réside sur le serveur, et je veux seulement que mon client soit conscient du service WCF, pas de l'assemblage EF. Et même si c'était le problème, cela ne répondrait pas à la question - pourquoi cela fonctionne-t-il à partir d'une application web, mais pas d'un site web? J'ai même essayé de copier l'ensemble du dossier Références de service de l'application de travail vers le site qui ne fonctionne pas, et l'erreur est restée. C'est insensé! –

Répondre

0

Solution de contournement temporaire - J'ai modifié la version .NET Framework du site Web en version 3.5 et fonctionne désormais correctement. C'est très bien pour mon projet, mais j'aimerais savoir pour référence future pourquoi le problème original s'est produit.

+0

j'ai le même problème. si l'objet que j'envoie à WCF ne contient aucune relation ... tout fonctionne bien ... mais si une propriété se réfère à un autre objet, la même exception se produit. Contrairement à vous, je ne peux pas changer la version du framework en 3.4! – scatman

Questions connexes