2010-11-18 9 views
1

(facebooksdk.codeplex.com)FacebookSDK - 私はFacebookSDK(4.0.2)の最新バージョンを使用していAllowPartiallyTrustedCallers問題

そして私は、Srcコードはつまり、いくつかのプロジェクトで構成されて気づいた。

1)

サンプル - > Facebook.Samples.AspWebsiteプロジェクト
サンプル - > Facebook.Samples.MvcFacebookAppプロジェクト
サンプル - > Facebook.Samples.MvcWebsiteプロジェクト

2)

テスト - > Facebook.Tests
テスト - > Facebook.Web.Tests

3)

Facebookのプロジェクト
Facebook.Webプロジェクト
Facebook.Web.Mvcプロジェクト

さて、私はFacebook Canvas .Net 4.0 MVC 2アプリケーションをビルドしており、単にFacebook.Samples.MvcFacebookAを使用しています私の状況に合ったプロジェクトを作成し、クラスとファイルを置き換えて追加します。しかし、私はMicrosoft Azureクラウド上で自分のサイトが稼動するようになり、データレイヤ(データベース)をプロジェクトに抽象化したいと思っています。 > Facebook.Samples ...

-

1)

サンプル:だから私は今、解決策は次のようになり、先に行って、BusinessDataと呼ばれる溶液中の新しいプロジェクトを作成し、それにEntityDataModelを追加しました

2)

テスト - > Facebook.Tests ...

3)

Facebookのプロジェクト
Facebook.Webプロジェクト
Facebook.Web.Mvcプロジェクト
BusinessDataプロジェクト
- > Business.edmxグレート

は今、私は私のFacebook.SamplesにBusinessDataプロジェクトへの参照を追加します。 MvcFacebookApp Projectを開き、データベースにアクセスしてみてください。いくつかの平穏の研究の後

 

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 4.0私に進化してきましたされていない。しかし、私はFacebook.Samples.MvcFacebookAppプロジェクトにおける私のTrackUserAttribute.csクラスでこのエラーが出ますFacebookSDKソリューションのすべてのプロジェクトに含まれているGlobalAssemblyInfo.csファイルには、何か関係があります。

このコード行はGlobalAssemblyInfoにあります。CSファイル:

 

#if !(SILVERLIGHT || TESTS) 
[assembly: AllowPartiallyTrustedCallers] 
#endif 

が犯人であると思われます。このマイクロソフトの専門家によると:

http://www.simple-talk.com/dotnet/.net-framework/whats-new-in-code-access-security-in-.net-framework-4.0---part-i/

BusinessDataはSecurityCriticalレベルの権限を持っています。私のクラスTrackUserAttribute.csにはSecurityTransparentしかないため、BusinessDataアセンブリ内のメソッドを呼び出す権限を持っていないことがあります。これは正しいです?

[assembly:AllowPartiallyTrustedCallers]をGlobalAssemblyInfo.csファイルから削除しても、この問題を解決するためにさまざまなことを試しましたが、.edmxファイル自体に別の問題があります。メタデータなので、まだ完全な信頼特権などと関係があると思います。

私は確かにこれに簡単な答えがあります。このSDKラッパーを開発した人は、個人のニーズに合わせてSDKを拡張します。

データの抽象化を保証するための最良の方法と、提供するプロジェクトに結びつけることなく抽象化したいものは何ですか?

今のところ、開発を続けて、これであまり長く縛られないように、私は自分のエンティティモデル(edmx)をFacebook.Samples.MvcFacebookAppのmodelsフォルダに保存しました。これは今のところ機能しますが、私はむしろ独自のプロジェクトにedmxを格納しています。

乾杯 ロブ

答えて

1

[OK]を、私はその問題を残し、私はこのサイトに出くわした私のアプリケーションのためのイベントロガーとしてlog4netのをインストールした上に移動した後よう:基本的に私は、変換したい

http://it.toolbox.com/blogs/daniel-at-work/using-log4net-in-cnet-26794

log4netを最初に書かれた1.0/2.0よりもasp.net 4.0に変更してください。その後、log4netの古いコードを4.0で動作させる方法についてのこの人の指示を読んだあと、aha!瞬間が来た。基本的に彼が行うために必要なすべては彼のAssemblyInfo.csファイルにこの属性を置くことだった:

[アセンブリ:AllowPartiallyTrustedCallers]

だから、私はBusinessDataプロジェクトのために同じことをやったとAssemblyInfo.csがファイルを更新し、ねえ、それは働いたpresto!

深い熟考の後、私はこれが何をしているのか分かっていました。私のFacebook.Samples.MvcFacebookAppは、そこに含まれるオブジェクトを含むSecurityCriticalアセンブリを呼び出すための部分的な権限を許していました。したがって、私は今すぐに進み、Mvcアプリケーションからこのアセンブリのedmx(EntityDataModel)を呼び出すことができます。

これはなぜ必要なのか完全には分かっていませんが、App.configファイルからMvcアプリケーションのWeb.configファイルに接続文字列をコピーすることが問題を解決します。何らかの理由で、edmxが接続文字列のApp.configの代わりにweb.configから読み込もうとしていたようです。今はApp.configファイルとWeb.configファイルに同じ接続文字列があります。

Meh!それは動作し、私は幸せです...移動!

:-D

関連する問題