C# WCF CustomBinding-无法使用自定义授权策略获取元数据

C# WCF CustomBinding-无法使用自定义授权策略获取元数据,c#,wcf,iis,binding,metadata,C#,Wcf,Iis,Binding,Metadata,在解决了之前的问题后,我想将netTcpBinding转换为customBinding,我成功地管理了它。但是,当我将自定义授权策略放置到位时,WcfTestClient(和普通客户端)在尝试提取元数据时出现错误(如果没有该策略,则可以正常工作!) 我的配置: <serviceAuthorization principalPermissionMode="Custom"> <authorizationPolicies> <add p

在解决了之前的问题后,我想将netTcpBinding转换为customBinding,我成功地管理了它。但是,当我将自定义授权策略放置到位时,WcfTestClient(和普通客户端)在尝试提取元数据时出现错误(如果没有该策略,则可以正常工作!)

我的配置:

<serviceAuthorization principalPermissionMode="Custom">
        <authorizationPolicies>
          <add policyType="Sample.Tools.CustomAuthorizationPolicy, Sample" />
        </authorizationPolicies>

)这可能是因为还需要自定义授权管理器。我尝试了这一点,并添加了CustomAuthorizationManager(CheckAccessCore总是返回true),但它不起作用

这在配置中添加为:

    <serviceAuthorization principalPermissionMode="Custom" serviceAuthorizationManagerType="Sample.Tools.CustomAuthorizationManager, Sample">
        <authorizationPolicies>
          <add policyType="Sample.Tools.CustomAuthorizationPolicy, Sample" />
        </authorizationPolicies>

配置的其余部分:

绑定:

<customBinding>
      <binding name="SampleBinding" receiveTimeout="00:05:00">
        <transactionFlow/>
        <security authenticationMode="SecureConversation" messageSecurityVersion="WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10">
            <secureConversationBootstrap authenticationMode="UserNameForSslNegotiated" messageSecurityVersion="WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10">
                <localClientSettings maxClockSkew="23:59:59" />
                <localServiceSettings maxClockSkew="23:59:59" />
           </secureConversationBootstrap>                   
            <localClientSettings maxClockSkew="23:59:59" />
            <localServiceSettings maxClockSkew="23:59:59" />
        </security>
        <binaryMessageEncoding/>
        <tcpTransport transferMode="Buffered" portSharingEnabled="true" maxReceivedMessageSize="65536" hostNameComparisonMode="StrongWildcard"/>
      </binding>
    </customBinding>

行为:

<behavior name="SampleBehavior">
      <serviceMetadata httpGetEnabled="false" />
      <serviceDebug includeExceptionDetailInFaults="true" httpHelpPageEnabled="true" httpsHelpPageEnabled="true" />
        <serviceAuthorization principalPermissionMode="Custom" serviceAuthorizationManagerType="Sample.Tools.CustomAuthorizationManager, Sample">
        <authorizationPolicies>
          <add policyType="Sample.Tools.CustomAuthorizationPolicy, Sample" />
        </authorizationPolicies>
      </serviceAuthorization>
      <serviceCredentials>
        <serviceCertificate findValue="MySample" storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectName" />
        <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="Sample.Tools.CustomUserNameValidator, Sample" />
      </serviceCredentials>
      <serviceThrottling maxConcurrentCalls="2147483647" maxConcurrentSessions="2147483647" maxConcurrentInstances="2147483647" />
    </behavior>

服务:

<services>
    <service behaviorConfiguration="SampleBehavior"
    name="Sample.SampleService">
    <endpoint address="" 
              binding="customBinding" 
              bindingConfiguration="SampleBinding"
              name="MyServiceEndpoint" 
              contract="Sample.ISampleService">
        <identity>
            <dns value="localhost" />
        </identity>
    </endpoint>

    <endpoint address="mex" 
              binding="mexTcpBinding" 
              bindingConfiguration=""
              name="MyServiceMexTcpBidingEndpoint" 
              contract="IMetadataExchange" />
        <host>
            <baseAddresses>
                <add baseAddress="net.tcp://localhost:809/SampleService.svc" />
            </baseAddresses>
        </host>
    </service>
</services>    


我几乎被困在这里,关于这个问题几乎找不到任何东西。

我在这里看到了一篇很好的帖子:

这解决了我的问题,现在我需要考虑实现适当的ServiceAuthorizationManager:)