3

私は非常に単純な ServiceAuthorizationManager (おそらく最も単純なもの) を持っており、Web 上のさまざまなチュートリアルに従いましたが、何らかの理由でブレークポイントがヒットせず、呼び出されていないと思います。

  • WcfTest という名前の WCF サービス アプリケーションを作成しました。
  • 既定のクラス Service1.svc、IService.cs を保持しますが、文字列を返すようにメソッドを変更しました
  • ServiceAuthorizationManager を継承する新しいクラスを追加
  • メソッド CheckAccessCore() をオーバーライドしました
  • このマネージャー クラスを使用するように web.config を調整しました
  • WCF サービス アプリケーションを実行する

  • アセンブリは WcfTest と呼ばれます

  • すべてのクラスはプロジェクトのルートにあり、フォルダーなどはありません

メソッドを呼び出すと、この時点で ServiceAuthorizationManager が呼び出されることを期待していますか、それともここで間違っていますか? 受信したすべてのリクエストでカスタム ServiceAuthorizationManager をヒットすることが全体的な目的だと思いましたか?

前もってありがとう、オナム。

これ以上の情報が必要な場合はお知らせください。明らかに非常に単純なはずなのに、私は非常に混乱しているため、タカのようにこれを見ています。

[ServiceContract]
public interface IService1
{
    [OperationContract]
    [WebGet(UriTemplate = "/getIt",ResponseFormat=WebMessageFormat.Json)]
    string GetIt();
}

public class Service1 : IService1
{
    public string GetIt()
    {
        return "boo!";
    }
}

public class MyServiceMan : ServiceAuthorizationManager
{
    protected override bool CheckAccessCore(OperationContext operationContext)
    {
        try
        {
            //Some stuff here breakpoint set on above line not hit
            return false;
        }
        catch (Exception e)
        {
            return false;
        }
    }
}

<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <services>
      <service name="WcfTest.Service1">
        <endpoint address=""
                  contract="WcfTest.IService1"
                  binding="webHttpBinding">
        </endpoint>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
          <serviceMetadata httpGetEnabled="true"/>
          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="false"/>
          <serviceAuthorization serviceAuthorizationManagerType="WcfTest.MyServiceMan,WcfTest" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
 <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>
</configuration>
4

2 に答える 2