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