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文件。問題已解決。
謝謝!
這是正確的,我確實有一個clientaccesspolicy.xml位於http://server/clientaccesspolicy.xml。見上面的內容 –
原來我沒有把API放在clientaccesspolicy.xml中的服務前面......我會把它給你,因爲你的帖子讓我重新檢查它......謝謝! –