Я использую последнюю версию FacebookSDK (4.0.2) (facebooksdk.codeplex.com)
И я заметил, что код Src состоит из нескольких проектов, а именно:
1)
Образцы -> Facebook.Samples.AspWebsite ProjectОбразцы -> Facebook.Samples.MvcFacebookApp ProjectОбразцы -> Facebook.Samples.MvcWebsite Project
2)
Тесты -> Facebook.TestsТесты -> Facebook.Web.Tests
3)
Проект FacebookПроект Facebook.WebПроект Facebook.Web.Mvc
Итак, я создаю приложение Facebook Canvas .Net 4.0 MVC 2 и просто использую проект Facebook.Samples.MvcFacebookApp и заменяю и добавляю классы и файлы, как мне кажется, подходящим для моей ситуации.Однако я дошел до того, что мой сайт будет работать в облаке Microsoft Azure, и я хочу абстрагировать слой данных (базу данных) в свой проект.Поэтому я решил создать новый проект в решении BusinessData и добавил к нему EntityDataModel, поэтому теперь решение выглядит так:
1)
Samples -> Facebook.Samples...
2)
Тесты -> Facebook.Tests ...
3)
Facebook ProjectПроект Facebook.WebПроект Facebook.Web.MvcBusinessData Project-> Business.edmx
Отлично, теперь я добавляю ссылку на проект BusinessData в свой проект Facebook.Samples.MvcFacebookApp и пытаюсь получить доступ к моей базе данных.Тем не менее, я получаю эту ошибку в своем классе TrackUserAttribute.cs в проекте Facebook.Samples.MvcFacebookApp:
System.MethodAccessException occurred
Message=Attempt by security transparent method 'Facebook.Samples.MvcFacebookApp.Models.TrackUserAttribute..ctor()' to access security critical method 'BusinessData.BusinessEntities..ctor()' failed.
Assembly 'Facebook.Samples.MvcFacebookApp, Version=4.0.2.0, Culture=neutral, PublicKeyToken=null' is marked with the AllowPartiallyTrustedCallersAttribute, and uses the level 2 security transparency model. Level 2 transparency causes all methods in AllowPartiallyTrustedCallers assemblies to become security transparent by default, which may be the cause of this exception.
Source=Facebook.Samples.MvcFacebookApp
StackTrace:
at Facebook.Samples.MvcFacebookApp.Models.TrackUserAttribute..ctor() in C:\Users\rkara\Desktop\FacebookPazooza\ThuziFacebookSDK\Source\Src\Facebook.Samples.MvcFacebookApp\Models\TrackUserAttribute.cs:line 13
InnerException:
После некоторого беспрецедентного исследования и неполного понимания политики CAS и ее развития в ASP.NetНасколько я понимаю, файл GlobalAssemblyInfo.cs, содержащийся во всех проектах решения FacebookSDK, как-то связан с ним.
Эта строка кода в файле GlobalAssemblyInfo.cs:
<code>
#if !(SILVERLIGHT || TESTS)
[assembly: AllowPartiallyTrustedCallers]
#endif
кажется виновником.По словам этого эксперта Microsoft:
http://www.simple -talk.com / dotnet / .net-framework / что нового в коде безопасности доступа в .net-framework-4.0--- part-i /
BusinessData имеет привилегии уровня SecurityCritical.Мой класс TrackUserAttribute.cs имеет только SecurityTransparent, поэтому не может не иметь привилегий для вызова методов в сборке BusinessData.Это правильно?
Я пробовал все виды вещей, чтобы заставить эту вещь работать, даже удаляя [assembly: AllowPartiallyTrustedCallers] из файла GlobalAssemblyInfo.cs, но у меня возникает другая проблема с самим файлом .edmx, говоряон не может загрузить метаданные, поэтому я предполагаю, что он все еще имеет отношение к полному доверию и т. д.
Я уверен, что на этот вопрос есть простой ответ, и я уверен, что ребята, которые разработали эту оболочку SDK,Я должен учитывать тот факт, что люди будут расширять свой SDK в соответствии с индивидуальными потребностями.
Каков наилучший подход для меня, чтобы обеспечить абстрагирование моих данных и всего, что я хочу абстрагировать, без необходимости связывать их с проектамипредоставлено?
На данный момент, чтобы продолжить разработку и не связываться с этим слишком долго, я просто сохранил свою модель сущности (edmx) в папке моделей на Facebook.Samples.MvcFacebookApp.Пока это работает, но я бы предпочел хранить edmx в своем собственном проекте.
Cheers Rob