Silverlight가 clientaccesspolicy.xml 파일을 다운로드하는 상황을 이해하는 데 문제가 있습니다. 설명이 필요한 런타임 환경에 몇 가지 문제가 있습니다.Silverlight clientaccesspolicy.xml 및 Azure dev 저장소
dev 패브릭에서 전체 IIS 모드로 실행되는 Azure 웹 응용 프로그램입니다. 정의 된 두 개의 사이트, App 및 Admin이 있습니다. 두 포트 모두 포트 : 80에 있기 때문에 호스트 헤더 인 app.dev.com 및 admin.dev.com을 통해 액세스 할 수 있습니다. 둘 다 내 HOSTS 파일에 127.0.0.1을 가리키는 항목이 있습니다. 두 클라이언트 앱에 모두 액세스하면 문제가 없습니다. Silverlight가로드되고 정의 된 RIA 서비스에 아무런 문제가 없습니다.
Silverlight 클라이언트가 dev 저장소에서 blob에 액세스하려고 할 때 문제가 발생합니다. problem has been explained before 그래서 나는 너무 깊게 가지 않을 것입니다 - 최종선, dev 파일 저장 방법이 어떻게 작동하는지 XML 파일을 웹 루트에 넣을 수 없습니다 (http://127.0.0.1:10000/devstoreaccount1/clientaccesspolicy.xml). 해결책은 URL을 다시 매핑하는 역방향 프록시입니다. 나는 Fiddler rule으로 완료했습니다. "요구가 그 요청을 수정 127.0.0.1:11000에 대한 오면 : 10000, 대신 GET"이것이 않는 것은이 지금까지 매핑에 관한 한 작동
if (oSession.host == "127.0.0.1:11000") {
oSession.host = "127.0.0.1:10000";
}
if (oSession.url == "127.0.0.1:10000/clientaccesspolicy.xml") {
oSession.url = "127.0.0.1:10000/devstoreaccount1/clientaccesspolicy.xml";
}
등; 내 브라우저에서 http://127.0.0.1:11000/clientaccesspolicy.xml를 쳤고 파일이 실제로 127.0.0.1:10000/devstoreaccount1/clientaccesspolicy.xml에서 생활 얻을 수 있습니다 :
<?xml version="1.0" encoding="utf-8"?>
<access-policy>
<cross-domain-access>
<policy>
<allow-from http-methods="*" http-request-headers="*">
<domain uri="*" />
</allow-from>
<grant-to>
<resource path="/" include-subpaths="true" />
</grant-to>
</policy>
</cross-domain-access>
</access-policy>
다음이 http://app.dev.com:81/default.aspx에 액세스 실버 라이트 클라이언트에서 실패를 (당신을 생각 나게 할이다) HOSTS에 127.0.0.1 피들러에서 찾고 예외
System.Security.SecurityException ---> System.Security.SecurityException: Security error.
at System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult)
at System.Net.Browser.BrowserHttpWebRequest.<>c__DisplayClass5.<EndGetResponse>b__4(Object sendState)
at System.Net.Browser.AsyncHelper.<>c__DisplayClass2.<BeginOnUI>b__0(Object sendState)
와
private void DownloadFile()
{
var sampleUri = new Uri("http://127.0.0.1:11000/devstorageaccount1/mycontainer/myblob.bin");
var client = new WebClient();
client.OpenReadCompleted += blobDownloaded;
client.OpenReadAsync(sampleUri);
}
void blobDownloaded(object sender, OpenReadCompletedEventArgs e)
{
if (e.Error != null) throw e.Error;
//throws
}
에 다시 매핑의 clientaccesspolicy.xml 파일이었다 다운로드되지! 나는 왜, 또는 그것을 어떻게 디버그하는지 모른다. 내 브라우저에서 블롭을 다운로드 할 수 있습니다. 왜 XML 파일을 다운로드하기 전에 이것이 던져 버릴지 설명 할 수 있습니까?
if (oSession.host == "app.dev.com:10000") {
oSession.host = "127.0.0.1:10000";
}
if (oSession.url == "127.0.0.1:10000/clientaccesspolicy.xml") {
oSession.url = "127.0.0.1:10000/devstoreaccount1/clientaccesspolicy.xml";
}
및
var sampleUri = new Uri("http://app.dev.com:10000/devstorageaccount1/mycontainer/myblob.bin");
에 다운로드 할 URL을 변경 그리고이 일이 성공 :
그때 나는 그 피들러 규칙을 업데이트 시도! Fiddler 캡처는 먼저 다운로드 된 clientaccesspolicy.xml 파일과 blob을 다운로드 한 것을 보여줍니다.
아무도 여기에 무슨 일이 일어나는지 설명 할 수 있습니까? 두 경우 모두 Silverlight 앱은 http://app.dev.com:81/default.aspx에 액세스하고 있습니다. http://127.0.0.1:11000에서 blob을 다운로드하려고 시도하면 첫 번째 clientaccesspolicy.xml을 다운로드하지 않고 SecurityException 이 실패합니다. 그러나 http://app.dev.com:10000에서 블롭을 다운로드하면 clientaccesspolicy.xml을 먼저 다운로드 한 다음 blob을 다운로드하면 성공합니다.
도움을 주셔서 감사합니다.이 사람은 저를 곤혹스럽게합니다.
스티브 답장을 보내 주셔서 감사합니다. Fiddler가 강제로 Firefox를 사용하고 있으며 http : //127.0.0을 눌렀습니다.1 : 10000/clientaccesspolicy.xml 브라우저에서 Fiddler를 통해 요청을 확인합니다. Silverlight가 브라우저를 대신하여 네트워크 요청을 처리한다고 생각했기 때문에 SL이 요청을했을 때 수동 요청 중에이를 보았을 때 볼 수있었습니다. –
그게 틀림 없어. [이 도구] (http://agazuredevstoreproxy.codeplex.com/)를 통해 프록시 할 때 127.0.0.1 이상에서 작동합니다. Firefox에서 직접 Silverlight를 통해 가져올 때와 Firefox에서 Silverlight를 통해 가져올 때 127.0.0.1에 대한 동작이 일치하지 않습니다. –
Silverlight는 기본적으로 브라우저의 HTTP 스택을 사용한다고 생각하기 때문에 이상한 점에 동의합니다. – smarx