none
WCF. Проблема с утсановкой dns на стороне клиента RRS feed

  • Вопрос

  • Добрый день! Пишу WCF сервис + клиент к нему,ниже приведены настройки сервиса и клиента

    - настройки сервиса

      <system.serviceModel>
        <diagnostics>
          <messageLogging logEntireMessage="false" logKnownPii="false" logMalformedMessages="true" logMessagesAtServiceLevel="false" logMessagesAtTransportLevel="true" />
        </diagnostics>
        <services>
          <service behaviorConfiguration="customCred" name="GRAD.Replication.Services.ConfigurationService.WCFService.ConfigurationService">
            <endpoint address="net.tcp://localhost/ConfigurationService"
              binding="netTcpBinding" bindingConfiguration="config_binding_tcp"
              name="IConfigurationServiceTcp" contract="GRAD.Replication.Services.ConfigurationService.Contracts.IConfigurationService"
              listenUriMode="Explicit" >
              <identity>
                <dns value="client"/>
              </identity>
            </endpoint>
            <host>
              <baseAddresses>
                <add baseAddress="http://localhost:4000/ConfigurationService"/>
              </baseAddresses>
            </host>
          </service>
        </services>
        
        <bindings>
          <netTcpBinding>
            <binding name="config_binding_tcp" transferMode="Streamed" maxReceivedMessageSize="4294967296" sendTimeout="00:10:00">
              <security mode="TransportWithMessageCredential">
                <transport clientCredentialType="Certificate"></transport>
                <message clientCredentialType="UserName"/>
              </security>
            </binding>
          </netTcpBinding>
        </bindings>
        
        <behaviors>
          <serviceBehaviors>
            <behavior name="customCred">
              <serviceCredentials>
                <clientCertificate>
                  <authentication certificateValidationMode="None"/>
                </clientCertificate>
                <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="GRAD.Replication.Services.ConfigurationService.WCFService.Auth.UsernameAuthentication, GRAD.Replication.Services.ConfigurationService.WCFService" />
                <serviceCertificate findValue="04" storeLocation="LocalMachine" storeName="My" x509FindType="FindBySerialNumber"></serviceCertificate>
              </serviceCredentials>
              <serviceMetadata httpGetEnabled="True" />
            </behavior>
          </serviceBehaviors>
        </behaviors>
      </system.serviceModel>

    - настройки клиента

    <system.serviceModel>
            <bindings>
                <netTcpBinding>
                    <binding maxReceivedMessageSize="4294967296"  name="IConfigurationServiceTcp" closeTimeout="00:01:00" openTimeout="00:01:00" 
                             receiveTimeout="00:10:00" 
                             sendTimeout="00:01:00" transactionFlow="false" transferMode="Streamed" transactionProtocol="OleTransactions"
                             hostNameComparisonMode="StrongWildcard"
                             listenBacklog="10" maxBufferPoolSize="524288" maxBufferSize="65536" maxConnections="10">
                        <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/>
                        <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false"/>
                        <security mode="TransportWithMessageCredential">
                            <transport clientCredentialType="Certificate"/>
                            <message clientCredentialType="UserName"/>
                        </security>
                    </binding>
                </netTcpBinding>
            </bindings>
          <behaviors>
            <endpointBehaviors>
              <behavior name="MyBeh">
                <clientCredentials>
                  <serviceCertificate>
                  </serviceCertificate>
                  <clientCertificate findValue="06" storeLocation="LocalMachine" storeName="My" x509FindType="FindBySerialNumber"/>
                </clientCredentials>
              </behavior>
            </endpointBehaviors>
          </behaviors>
          <client>
            <endpoint behaviorConfiguration="MyBeh" address="net.tcp://localhost/ConfigurationService" endpointConfiguration="" binding="netTcpBinding"
                      bindingConfiguration="IConfigurationServiceTcp" 
                      contract="GRAD.Replication.Services.ConfigurationService.Contracts.IConfigurationService" name="endPointConf">
              <identity>
                <dns value="client"/>
              </identity>
            </endpoint>
          </client>
        </system.serviceModel>

    Проблема:

    При авторизации сервиса на клиенте,клиент сверяет dns x509 сертификата сервиса с ожидаемым ( в моем случае ожидаемый должен быть  value="client"  ) как указано в настройке , <identity> <dns value="client"/> </identity> проблема в том что клиент почему то за ожидаемый dns берет имя хоста сервиса, в моем случае  (address="net.tcp://localhost/ConfigurationService") это localhost и выводит ошибку что  dns сервиса отличается от  localhost.

    Буду признателен за любую помощь.

    p.s.

    если дать сертификату имя localhost то все работает

    9 апреля 2012 г. 3:40

Ответы

  • Вообщем уже сам разобрался)

    Проблема была в том что я из кода менял настройки клиента,при этом сбрасывались xaml настройки и  <identity>
       
    <dnsvalue="client"/>
    </identity> игнорировался.

    9 апреля 2012 г. 7:10

Все ответы