2012-06-13 2 views
0

Я использую службы ria с конечной точкой jsonp. Когда я вызываю свой метод в служебном файле, он отлично работает в ie и firefox, но иногда работает в chrome, и иногда я получаю: «Обратный вызов JavaScript для перекрестного домена не поддерживается в аутентифицированных сервисах». ошибка. Даже я не использую аутентифицированные сервисы.Проблема аутентификации в службах jsonp ria

Вот фрагмент кода о том, что у меня есть.

служба JSONP

[EnableClientAccess(RequiresSecureEndpoint = false)] 
    public class PPolJsonService : LinqToEntitiesDomainService<PPolAdvEntities> 
    { 

     public IQueryable<QuestionEntity> GetCompleteSurvey() 
     { 
     ............ 
     } 
    } 

Javascript код

function (data) { 
         var Params = {}; 
         Params.type = 'GET'; 
         Params.url = 'http://127.0.0.1:81/PPolSilverlight-Web-Services-PPolJsonService.svc/JSONP/GetCompleteSurvey; 
         Params.dataType = 'jsonp'; 

         Params.data = { data:'somedata'}; 
         Params.success = function (data) { }; 
         Params.jsonpCallback = "ppolv2" 
         $.ajax(Params); 
        }); 

В файле web.config моя установка <authentication mode="Forms">

Если установить <authentication mode="None"> Я в состоянии решить все проблемы, связанные с хромом. Но остальная часть приложения нуждается в аутентификации. Поэтому я должен использовать его как «mode = Forms». И, как вы видите, моя служба не использует аутентификацию так,

Почему я получаю эту ошибку и есть ли какое-либо решение?

Примечание:

Кстати у меня есть другие параметры в файле web.config, как

<webHttpEndpoint> 
     <standardEndpoint crossDomainScriptAccessEnabled="true" 
          automaticFormatSelectionEnabled="true"/> 
     </webHttpEndpoint> 

или их в clientaccesspolicy.xml

<?xml version="1.0" encoding="utf-8"?> 
<access-policy> 
    <cross-domain-access> 
    <policy> 
     <allow-from http-request-headers="*"> 
     <domain uri="http://*"/> 
     <domain uri="https://*" /> 
     </allow-from> 
     <grant-to> 
     <resource path="/" include-subpaths="true"/> 
     </grant-to> 
    </policy> 
    </cross-domain-access> 
</access-policy> 

, но ни один из них не помогает мне.

Заранее спасибо.

ответ

1

Hi Попробуйте добавить эту строку в свои файлы web.config. Он позволяет использовать запросы Ajax для междоменного домена.

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
<system.webServer> 
    <httpProtocol> 
    <customHeaders> 
     <add name="Access-Control-Allow-Origin" value="*" /> 
    </customHeaders> 
    </httpProtocol> 
</system.webServer> 
</configuration> 
+0

Спасибо за anwer MajoB. Но это не сработало. – serhads

+0

У вас есть служба и веб-сайт, опубликованный на том же сайте iis? если да, попробуйте использовать относительный путь в Params.url. –

+0

К сожалению, этот javascript необходимо звонить с любой веб-страницы. Таким образом, они не находятся на одном и том же сайте iis. – serhads

0

Я не проверял его достаточно, но, я думаю, я нашел решение.

При использовании безопасной конечной точки в приложении, и если вам не нужно использовать безопасную конечную точку для JSONP услуг,

вы можете добавить RequireSSL = «истина» в

<authentication mode="Forms"> 
    <forms name=".PPolSilverlight_ASPXAUTH" timeout="2880" requireSSL="true" /> 
</authentication> 

с этим небольшим фрагмент кода, который ваши незащищенные службы jsonp смогут работать без аутентификации.

Смежные вопросы