Как использовать netTcpBinding с безопасностью на уровне сообщений? - PullRequest
0 голосов
/ 09 августа 2011

Я перевожу свои сервисы WSE3 на платформу WCF. Клиенты станут устаревшими клиентами WSE3.

Чтобы выполнить некоторые требования, я создал пользовательское поведение службы. Конфигурация (в web.config) для поведения службы содержит элемент serviceCertificate.

Это поведение применяется к моему сервису с использованием настройки behaviorConfiguration. Теперь я хочу вызвать одну службу WCF из другой службы WCF, размещенной в том же IIS 7.5. Поэтому я добавил netTcpBinding (и netNamedPipeBinding тоже). Когда я вызывал OperationContract другой службы из какой-либо службы WCF, это давало мне ошибку Access is denied.. Я удалил параметр behaviorConfiguration для службы, а затем netTcpBinding (и netNamedPipeBinding) сработал.

Конфигурация как показано ниже:

<services>
          <service name="Services.AuthorizationService" behaviorConfiguration="LegacyBehavior">
            <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" >
            <endpoint
              name="AuthorizationService"
              address=""
              binding="wsHttpBinding"               contract="ServiceContracts.IAuthorizationService" />
            <endpoint address="net.pipe://localhost/TestSite/AuthorizationService.svc"
                   binding="netNamedPipeBinding"                   contract="ServiceContracts.IAuthorizationService"
                   name="AuthorizationNamedPipeEndpoint"/>  


Конфигурация поведения службы в web.config:

<behavior name="LegacyBehavior">
          <dataContractSerializer maxItemsInObjectGraph="2147483646"/>
          <serviceAuthorization
            principalPermissionMode="Custom"
            serviceAuthorizationManagerType="Legacy.AuthorizationManager,Legacy.Services" >
          <serviceDebug
            httpHelpPageEnabled="true"
            includeExceptionDetailInFaults="true" />
          <serviceMetadata httpGetEnabled="true" />
          <serviceCredentials>
            <serviceCertificate
              findValue="CN=WSE2QuickStartServer"
              storeLocation="LocalMachine"
              storeName="My"
              x509FindType="FindBySubjectDistinguishedName" />
            <issuedTokenAuthentication
              audienceUriMode="Always"
              certificateValidationMode="PeerOrChainTrust"
              revocationMode="NoCheck"
              trustedStoreLocation="LocalMachine"
              samlSerializerType="Legacy.TokenSerializer, Legacy.Services"
              allowUntrustedRsaIssuers="false">
              <allowedAudienceUris>
                <add allowedAudienceUri="http://schemas.xmlsoap.org/ws/2005/02/trust/RST/Issue/SAML" />
              </allowedAudienceUris>
            </issuedTokenAuthentication>
          </serviceCredentials>
        </behavior>

Конфигурация привязки для netTcpBinding выглядит следующим образом:

Я хочу знать,

  1. Как использовать netTcpBinding в таком сценарии?
  2. можно ли использовать два разных поведения для одного и того же сервиса? Если да, то как?
  3. Если нет, как я могу добиться привязки именованного канала в этом сценарии?
  4. Почему материал, связанный с сертификатом сервера, может вызывать ошибку Access is denied? Нет внутреннего исключения; просто отказано в сообщении Accedd!
...