2011-06-28 67 views
2

我正在爲我們的Intranet構建Silverlight 4.0 Web應用程序,該應用程序將通過REST連接到服務器以獲取數據。我使用Visual Studio 2010中從Silverlight調用REST服務

我使用下面的代碼中的方法發出請求:

var wc = new WebClient(); 
const string uri = "http://server/api/statistics.svc/overall/"; 

wc.OpenReadCompleted += new OpenReadCompletedEventHandler(wc_OpenReadCompleted); 
wc.OpenReadAsync(new Uri(uri, UriKind.Absolute)); 

我OnReadCompleted事件處理程序:

void wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e) 
{ 
    var buffer = new byte[e.Result.Length]; 

    e.Result.Read(buffer,0,(int)e.Result.Length); 

    var xmlstr = buffer.Aggregate(String.Empty, (current, t) => current + (char) t); 

    // Do something with xmlstr... 
} 

試圖當我出現的問題運行應用程序。唯一的例外是在wc_OpenReadCompleted事件處理程序拋出在一行,並具有以下細節:

TargetInvocationException: An exception occurred during the operation, making the result invalid. Check InnerException for exception details. 

內部異常:

System.Security.SecurityException: Security error. 

我的REST服務不使用任何類型的身份驗證。

我已經創建了位於具有下列設置一個clientaccesspolicy.xml:

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

你的幫助是極大的讚賞!

感謝,

傑弗裏·凱文撬

UPDATE

我沒有指定/ API /在我的xml文件。問題已解決。

謝謝!

回答

2

您的Silverlight應用程序僅允許連接到從其下載的服務器以及具有跨域策略文件的服務器。這被稱爲Same Origin Policy。出於安全原因,連接到任何其他服務器都被拒絕。

+0

這是正確的,我確實有一個clientaccesspolicy.xml位於http://server/clientaccesspolicy.xml。見上面的內容 –

+0

原來我沒有把API放在clientaccesspolicy.xml中的服務前面......我會把它給你,因爲你的帖子讓我重新檢查它......謝謝! –