【发布时间】:2010-06-30 16:19:08
【问题描述】:
问题:
存在一个问题,我无法从我的 RIA 应用程序访问我的自托管 ADO.NET 数据服务。
我的服务与富 Internet 应用程序 (RIA) 的 Web 项目分开托管。
我需要启用来自单独 Silverlight(和 Flash)客户端应用程序的访问。
当我尝试调用 ADO.NET 数据服务(单独自托管)时,在 Silverlight 中出现异常(见下文)。我相信这是由于 Silverlight 禁止跨域调用。
System.InvalidOperationException:保存更改时出错。有关详细信息,请参阅内部异常。 ---> System.Data.Services.Http.WebException:“HttpWebResponse.NormalizeResponseStatus”出现内部错误。 在 System.Data.Services.Http.HttpWebResponse.NormalizeResponseStatus(Int32& 状态码) 在 System.Data.Services.Http.HttpWebResponse..ctor(HttpWebRequest 请求,Int32 状态码,字符串 responseHeaders) 在 System.Data.Services.Http.HttpWebRequest.CreateResponse() 在 System.Data.Services.Http.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult) 在 System.Data.Services.Client.QueryAsyncResult.AsyncEndGetResponse(IAsyncResult asyncResult) --- 内部异常堆栈跟踪结束 --- 在 System.Data.Services.Client.BaseAsyncResult.EndExecute[T](对象源,字符串方法,IAsyncResult asyncResult) 在 System.Data.Services.Client.QueryAsyncResult.EndExecute[TElement](对象源,IAsyncResult asyncResult) 在 System.Data.Services.Client.DataServiceQuery`1.EndExecute(IAsyncResult asyncResult) 在 Curo.Silverlight.MainPage.c__DisplayClass1.<.ctor>b__0(IAsyncResult ar) 在 System.Data.Services.Client.BaseAsyncResult.HandleCompleted() 在 System.Data.Services.Client.QueryAsyncResult.AsyncEndGetResponse(IAsyncResult asyncResult) 在 System.Data.Services.Http.HttpWebRequest.ReadyStateChanged() System.Data.Services.Http.WebException:“HttpWebResponse.NormalizeResponseStatus”出现内部错误。 在 System.Data.Services.Http.HttpWebResponse.NormalizeResponseStatus(Int32& 状态码) 在 System.Data.Services.Http.HttpWebResponse..ctor(HttpWebRequest 请求,Int32 状态码,字符串 responseHeaders) 在 System.Data.Services.Http.HttpWebRequest.CreateResponse() 在 System.Data.Services.Http.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult) 在 System.Data.Services.Client.QueryAsyncResult.AsyncEndGetResponse(IAsyncResult asyncResult)
注意事项:
根据我的阅读,ADO.NET 数据服务似乎禁止跨域访问,这可能导致我不得不对数据访问采取另一种方法,例如使用纯 REST 框架..?
“跨域ADO.NET的问题 数据服务比它更复杂 听起来,它还没有解决。 我已经和微软讨论过 而现在和它的原因 不起作用与其使用有关 浏览器级别的传输和 运输不允许跨站点 脚本。”
见: http://forums.silverlight.net/forums/p/70925/170703.aspx#170703
我了解我可能需要公开一个 ClientAccessPolicy.xml 文件,该文件将定义访问规则,同时限制跨站点脚本。
值得一提的是,RIA 应用程序将在同一个 LAN 上运行。
问题:
考虑到我的 RIA 客户端将在同一防火墙后运行,我是否有可行的方法来访问这些服务?如果有怎么办?
如何准确地从自托管 ADO.NET 数据服务公开 ClientAccessPolicy.xml?
为了允许外部访问我的服务,您建议采用哪种方式? - 不同的 REST 框架? - 以分离为代价在同一个 Web 项目中托管服务? - 任何其他建议...
谢谢。
【问题讨论】:
标签: silverlight client-server wcf-data-services