私の FooData.svc.cs ファイルは次のようになります: (宣言されていないオブジェクト CurrentDataSource に注意してください。)
public class FooData : DataService<FooEntities>
{
public static void InitializeService(DataServiceConfiguration config)
{
// init code
}
[WebGet]
public IQueryable<someStoredProcedure_Result> someStoredProcedure(int param1, int param2)
{
return CurrentDataSource.someStoredProcedure(param1, param2).AsQueryable();
}
}
私の Authorizer.cs ファイルは次のようになります。
public class Authorizer : System.ServiceModel.ServiceAuthorizationManager
{
protected override bool CheckAccessCore(OperationContext operationContext)
{
if (base.CheckAccessCore(operationContext))
{
if (IsAuthorized())
return true;
else
return false;
}
else
return false;
}
private bool IsAuthorized(OperationContext operationContext)
{
// some code here that gets the authentication headers,
// etc from the operationContext
// *********
// now, how do I properly access the Entity Framework to connect
// to the db and check the credentials since I don't have access
// to CurrentDataSource here
}
}
適切な測定のために、Web.config から該当するセクション:
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceAuthorization serviceAuthorizationManagerType="MyNamespace.Authorizer, MyAssemblyName" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
したがって、私の質問は、Authorizer.cs のコードですべてのアスタリスクが表示される場所に関係しています。CurrentDataSource にアクセスできないため、ServiceAuthorizationManager 内から Entity Framework に接続するための推奨される方法は何ですか? 別の「接続」を確立するだけですか?例えば
using (var db = new MyNamespace.MyEntityFrameworkDBContext())
{
// linq query, stored proc, etc using the db object
}
明確にするために、上記のコードは問題なく動作します。それが正しい方法かどうかは疑問です。ちなみに、これは .NET 4.5 と Entity Framework 5 を使用した Visual Studio 2012 WCF Data Services プロジェクトです。