2012-06-13 58 views
0

我正在使用帶有jsonp端點的ria服務。當我在服務文件中調用我的方法時,它在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">我能解決所有的問題用鍍鉻。但其他應用程序需要身份驗證。所以這就是爲什麼我必須使用它作爲「模式=形式」。正如你看到我的服務不使用身份驗證,所以,

爲什麼我得到這個錯誤,是否有任何解決方案呢?

注:

順便說我在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> 

在web.config中其他設置,如

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

或這些但他們都不是我的幫助。

在此先感謝。

回答

1

嗨嘗試將此行添加到您的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

謝謝anjo MajoB。但它沒有奏效。 – serhads

+0

您是否在同一個iis網站上發佈了服務和網頁?如果是,則嘗試在Params.url中使用相對路徑。 –

+0

不幸的是,這個JavaScript需要從任何網頁的電話。所以他們不在同一個iis網站上。 – serhads

0

我還沒有足夠的測試,但我想我找到了解決方案。

,如果你在你的應用程序中使用安全的端點,如果你不需要使用安全端點JSONP服務,

您可以在

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

這個小加requireSSL =「真」一段代碼您的不安全的jsonp服務將能夠在沒有身份驗證的情況下工作。