0

私の 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 プロジェクトです。

4

1 に答える 1