私は非常に単純な 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>