Skip to main content
 首页 » 编程设计

c#之在 web.config 中引用 WCF CustomBinding 时遇到问题

2024年02月03日28傻小

我创建了一个自定义绑定(bind)来替换我之前使用的 wsHttpBinding,这样我就可以设置 maxClockSkew 设置 ( http://blog.salamandersoft.co.uk/index.php/2009/01/wcf-wshttpbinding-and-clock-skew/ )。绑定(bind)是在 web.config 中创建的,而不是在代码中。

但我不确定如何告诉我的服务使用此绑定(bind)。

这是我的绑定(bind):

  <customBinding> 
    <binding name="myWSHttpBinding"> 
      <transactionFlow transactionProtocol="WSAtomicTransactionOctober2004" /> 
      <security defaultAlgorithmSuite="Default" authenticationMode="SecureConversation" 
          requireDerivedKeys="true" securityHeaderLayout="Strict" includeTimestamp="true" 
          keyEntropyMode="CombinedEntropy" messageProtectionOrder="SignBeforeEncryptAndEncryptSignature" 
          messageSecurityVersion="WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10" 
          requireSecurityContextCancellation="true" requireSignatureConfirmation="false"> 
        <localClientSettings cacheCookies="true" detectReplays="true" 
            replayCacheSize="900000" maxClockSkew="00:05:00" maxCookieCachingTime="Infinite" 
            replayWindow="00:05:00" sessionKeyRenewalInterval="10:00:00" 
            sessionKeyRolloverInterval="00:05:00" reconnectTransportOnFailure="false" 
            timestampValidityDuration="00:05:00" cookieRenewalThresholdPercentage="60" /> 
        <localServiceSettings detectReplays="true" issuedCookieLifetime="10:00:00" 
            maxStatefulNegotiations="128" replayCacheSize="900000" maxClockSkew="00:05:00" 
            negotiationTimeout="00:01:00" replayWindow="00:05:00" inactivityTimeout="00:02:00" 
            sessionKeyRenewalInterval="15:00:00" sessionKeyRolloverInterval="00:05:00" 
            reconnectTransportOnFailure="false" maxPendingSessions="128" 
            maxCachedCookies="1000" timestampValidityDuration="00:05:00" /> 
        <secureConversationBootstrap defaultAlgorithmSuite="Default" 
            authenticationMode="UserNameForSslNegotiated" requireDerivedKeys="true" 
            securityHeaderLayout="Strict" includeTimestamp="true" keyEntropyMode="CombinedEntropy" 
            messageProtectionOrder="SignBeforeEncryptAndEncryptSignature" 
            messageSecurityVersion="WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10" 
            requireSecurityContextCancellation="true" requireSignatureConfirmation="false"> 
          <localClientSettings cacheCookies="true" detectReplays="true" 
              replayCacheSize="900000" maxClockSkew="00:05:00" maxCookieCachingTime="Infinite" 
              replayWindow="00:05:00" sessionKeyRenewalInterval="10:00:00" 
              sessionKeyRolloverInterval="00:05:00" reconnectTransportOnFailure="true" 
              timestampValidityDuration="00:05:00" cookieRenewalThresholdPercentage="60" /> 
          <localServiceSettings detectReplays="true" issuedCookieLifetime="00:15:00" 
              maxStatefulNegotiations="128" replayCacheSize="900000" maxClockSkew="00:05:00" 
              negotiationTimeout="00:01:00" replayWindow="00:05:00" inactivityTimeout="00:02:00" 
              sessionKeyRenewalInterval="15:00:00" sessionKeyRolloverInterval="00:05:00" 
              reconnectTransportOnFailure="true" maxPendingSessions="128" 
              maxCachedCookies="1000" timestampValidityDuration="00:05:00" /> 
        </secureConversationBootstrap> 
      </security> 
      <textMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16" 
          messageVersion="Default" writeEncoding="utf-8"> 
        <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" 
            maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> 
      </textMessageEncoding> 
      <httpTransport manualAddressing="false" maxBufferPoolSize="2147483647" 
          maxReceivedMessageSize="2147483647" allowCookies="false" authenticationScheme="Anonymous" 
          bypassProxyOnLocal="false" decompressionEnabled="true" hostNameComparisonMode="StrongWildcard" 
          keepAliveEnabled="true" maxBufferSize="2147483647" proxyAuthenticationScheme="Anonymous" 
          realm="" transferMode="Buffered" unsafeConnectionNtlmAuthentication="false" 
          useDefaultWebProxy="true" /> 
    </binding> 
  </customBinding> 

请您参考如下方法:

使用服务的 endpoint 元素的 bindingConfiguration 属性简单地按名称引用您的绑定(bind)。