Проблема:
Существует проблема, из-за которой я не могу получить доступ к своим автономным службам данных ADO.NET из моих приложений RIA.
Мои службы размещаются отдельно от веб-проектов с помощью Rich Internet Applications (RIA) s.
Мне нужно разрешить доступ из отдельных клиентских приложений 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, Int32 statusCode, String responseHeaders) в System.DataPRequest.Headers.HttpWebRequest. CreateResponse () в System.Data.Services.Http.HttpWebRequest.EndGetResponse (IAsyncResult asyncResult) в System.Data.Services.Client.QueryAsyncResult.AsyncEndGetResponse (IAsyncResult trace --- исключение EndResult в качестве внутреннего исключения System. Data.Services.Client.BaseAsyncResult.EndExecute [T] (источник объекта, метод String, IAsyncResult asyncResult) в System.Data.Services.Client.QueryAsyncResult.EndExecute [TElement] (источник объекта, IAsyncResult asyncRataesulter). .Client.DataServiceQuery`1.EndExecute (IAsyncResult asyncResult) в Curo.Silverlight.MainPage. ‹> C__DisplayClass1.‹. Ctor> b__0 (IAsyncResult ar) в System.Data.Services.Client.BaseAsyncRespleted () t System.Data.Services.Client.QueryAsyncResult.AsyncEndGetResponse (IAsyncResult asyncResult) в System.Data.Services.Http.HttpWebRequest.ReadyStateChanged () System.Data.Services.Http.WebExceptionResponse. в System.Data.Services.Http.HttpWebResponse.NormalizeResponseStatus (Int32 и statusCode) в System.Data.Services.Http.HttpWebResponse..ctor (запрос HttpWebRequest, Int32 statusCode, String responseHeaders) в System.DataPRequest.Headers.HttpWebRequest. CreateResponse () в System.Data.Services.Http.HttpWebRequest.EndGetResponse (IAsyncResult asyncResult) в System.Data.Services.Client.QueryAsyncResult.AsyncEndGetResponse (IAsyncResult)Result
Примечания:
Из того, что я прочитал, похоже, что междоменный доступ запрещен в отношении служб данных ADO.NET, что может привести к тому, что мне придется использовать другой подход к доступу к данным, например. используя чистую структуру REST ..?
«Проблема междоменных служб данных ADO.NET сложнее, чем кажется, и до сих пор не решена. Я уже некоторое время обсуждал ее с Microsoft, и причина того, что она не работает, связана с ее используя транспорт на уровне браузера, и этот транспорт не допускает межсайтовых сценариев ".
См .: http://forums.silverlight.net/forums/p/70925/170703.aspx#170703
Я понимаю, что мне может потребоваться открыть файл ClientAccessPolicy.xml, который будет определять правила доступа, ограничивая при этом межсайтовый скриптинг.
Также стоит отметить, что приложения RIA будут работать в одной локальной сети.
Вопросы:
Есть ли у меня жизнеспособные средства доступа к службам моих клиентов RIA, учитывая, что они будут работать за одним и тем же брандмауэром? Если да, то как?
Как точно открыть ClientAccessPolicy.xml из автономной службы данных ADO.NET?
Как вы порекомендуете действовать, чтобы разрешить внешний доступ к моим услугам? - Другой REST Framework? - Услуги хоста в рамках одного и того же веб-проекта за счет разделения? - Любой другой совет ...
Спасибо.