2014-01-03 2 views
0

Я хотел бы, чтобы изолированное хранилище в моем приложении Silverlight определялось доменом xap, из которого он загружается, а не доменом хоста, отображаемым в URL-адресе браузера, который он делает по умолчанию.Изменение идентификатора хранилища Silverlight

В соответствии с документацией Types of Isolated Storage должен быть способ хранения в соответствии с «Идентификатором издателя», решив называть сборку, вместо того, чтобы идентифицировать хранилище по URL-адресу, предоставляющему приложение. Я цитирую:

Сборочная идентификация является доказательством сборки. Это может произойти от от криптографической цифровой подписи, которая может быть сильным именем сборки , разработчиком программного обеспечения сборки или его URL-адресом . Если сборка имеет как сильное имя, так и программное обеспечение , то используется идентификатор издателя программного обеспечения. Если сборка происходит из Интернета и не имеет знака, используется идентификатор URL .

Я настоятельно назвал сборку (sn проверен) и добавил сертификат к доверенному корню на моей машине. Я обслуживаю страницу локально через iis, но хранилище по-прежнему идентифицируется URL-адресом сайта.

Я попытался создать в магазин 2 различными способами:

IsolatedStorageSettings.SiteSettings[mykey] = myvalue; 
//and 
IsolatedStorageFile.GetUserStoreForApplication().CreateFile("myfile.txt"); 

Идентификатор можно увидеть внутри C:\Users\afeldman\AppData\LocalLow\Microsoft\Silverlight\is\20ngypzr.gs4\1l3t5sqo.aji\1\s\...\id.dat текстового файла, и, к сожалению, он остается привязанным к принимающей URL.

Неужели кому-то удалось идентифицировать изолированное хранилище с идентификатором URL-адреса другого хоста, используя жестко названные сборки или любые другие средства?

+0

Вы вызываете GetUserStoreForApplication(), возможно, попробуйте GetUserStoreForAssembly() http://msdn.microsoft.com/en-us/library/system.io.isolatedstorage.isolatedstoragefile.getuserstoreforassembly(v=vs.110).aspx –

+0

'GetUserStoreForAssembly()' недоступен для Silverlight – Alex

ответ

0

По какой-то причине он начал работать так, как я хотел. Идентификация изолированного хранилища идентифицируется доменом, который обслуживал .xap. Для уточнения:

относительного пути в пути .xap Src как этого

<object data="data:application/x-silverlight-2," type="application/x-silverlight-2"> 
    <param name="source" value="/mypath/my.xap" /> 
</object> 

С my.xap предоставляются как часть сайта, магазин будет связан с доменом этого сайта.

Если вы предоставите .xap из другого источника, то используйте полный путь на пути .xap Src, как это:

<object data="data:application/x-silverlight-2," type="application/x-silverlight-2"> 
    <param name="source" value="http://usethisdomain/mypath/my.xap" /> 
</object> 

Магазин теперь будет связан с usethisdomain. Подписание сборки не требуется. Я не совсем уверен, почему я видел разные результаты, которые я видел раньше.

Дополнительная информация, документация Types of Isolation, похоже, не полностью применима к Silverlight. Все мои попытки строго назвать сборку не меняли изолированный идентификатор хранилища. Расследовал код silverlight System.IO.IsolatedStorage с декомпилятором, но не нашел кода, который искал бы сильные имена сборки. Может быть, это просто скрыто.

В заключение, если вы можете управлять доменом исходного параметра, вы можете управлять идентификацией изолированного хранилища в silverlight.

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