Как использовать netTcpBinding с безопасностью на уровне сообщений?
Я перевожу свои сервисы 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
как следует:
Я хочу знать,
- Как использовать netTcpBinding в таком сценарии?
- я могу использовать два разных поведения для одного и того же сервиса? Если да, то как?
- Если нет, как я могу добиться привязки именованного канала в этом сценарии?
- Почему вызывающие сертификат серверные вещи вызывают
Access is denied
ошибка? Нет внутреннего исключения; просто отказано в сообщении!