我刚刚使用 Visual Studio Express 2012 for Web 开始了一个新的 Silverlight 项目。
我使用 EF 5 创建了启用 Silverlight 的 WCF 服务来访问 SQL Server 数据库。
我遇到的问题是该服务似乎无法返回从数据库中检索到的任何实体。返回一个新实体或任何旧对象就好了,但是当我尝试从上下文中返回一个实体时,我得到以下异常:
{System.ServiceModel.CommunicationException: The remote server returned an error: NotFound. ---> System.Net.WebException: The remote server returned an error: NotFound. ---> System.Net.WebException: The remote server returned an error: NotFound.
at System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult)
at System.Net.Browser.BrowserHttpWebRequest.<>c__DisplayClassa.<EndGetResponse>b__9(Object sendState)
at System.Net.Browser.AsyncHelper.<>c__DisplayClass4.<BeginOnUI>b__0(Object sendState)
--- End of inner exception stack trace ---
at System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state)
at System.Net.Browser.BrowserHttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelAsyncRequest.CompleteGetResponse(IAsyncResult result)
--- End of inner exception stack trace ---
at System.ServiceModel.AsyncResult.End[TAsyncResult](IAsyncResult result)
at System.ServiceModel.Channels.ServiceChannel.EndCall(String action, Object[] outs, IAsyncResult result)
at System.ServiceModel.ClientBase`1.ChannelBase`1.EndInvoke(String methodName, Object[] args, IAsyncResult result)
at NewProj.DataSvcRef.DataServiceClient.DataServiceClientChannel.EndGetAgency(IAsyncResult result)
at NewProj.DataSvcRef.DataServiceClient.NewProj.DataSvcRef.DataService.EndGetAgency(IAsyncResult result)
at NewProj.DataSvcRef.DataServiceClient.OnEndGetAgency(IAsyncResult result)
at System.ServiceModel.ClientBase`1.OnAsyncCallCompleted(IAsyncResult result)}
服务方法代码再简单不过了:
[OperationContract]
public Contact GetContact(int aID)
{
Contact res = null;
using (var db = new OFBEntities())
{
try
{
res = db.Contacts.Find(aID);
}
catch (Exception ex)
{
res = null;
}
return res;
}
}
正如我所提到的,如果我返回一个新创建的对象(return new Contact(){ name="test contact};),或者返回一个不在上下文中的类型(例如一个整数),一切正常。
这是快速版本的限制,还是我忘记了一些设置?过去,我创建了一些使用 VS 2010、Silverlight 4 消耗数据服务的 Silverlight 应用程序,我不记得需要设置什么特别的东西,但也许我只是忘记了我做了什么?
任何帮助表示赞赏!
编辑: 它与 DbContext 及其序列化方式有什么关系吗?我以前从未使用过 DbContext,我总是使用 EF 4 中的默认 ObjectContext ...
EDIT2:解决方案 已经有一段时间了,但我还有其他事情要做:o)如果有人在同一条船上,问题出在服务的序列化中。DbContext 默认创建代理,不同意序列化。我还不确定为什么——事实上,我需要对这些代理进行自我教育——但是禁用它们可以解决我的序列化问题。感谢 Pawel 的评论,我错误地认为我的序列化工作正常,重新检查服务器端错误让我回到了正确的轨道上。