Proxy WCF et userPrincipalName

Nous avons une assez grande demande mon équipe et moi sommes en développement, qui contient un certain nombre de WCF NetTCP à base de services. Le service Windows ce système va être en cours d'exécution en vertu de ne pas être un compte local, mais plutôt un utilisateur de domaine standard (avec des privilèges d'administration sur les serveurs hébergeant le service). Dans le milieu de tester la connectivité j'ai couru dans un problème où SSPI échouent. Basée sur quelques heures de recherche, ce qui m'a amené sur le chemin de la me manque la ligne suivante à partir de mon client config:

<identity>
     <userPrincipalName value="MACHINE\user" />
</identity>

Le problème avec cela est que je n'utilisez pas de VS ou svcutil pour générer un client/proxy pour ce service - les procurations utilisées sont entièrement écrit dans le code, et qu'ils héritent du Système.ServiceModel.ClientBase. Je crois a l'origine, cette option a été choisie afin que nous puissions utiliser exactement la même DataMember les objets qui passent à travers les services de chaque côté de la barrière - tiers des groupes n'aurez pas besoin de vous connecter à nos services et que ce n'était pas un problème.

Que quelqu'un connait un moyen pour moi de mettre userPrincipalName dans le client (code ou par le biais d'un config) quand je n'ai pas de points de terminaison spécifié dans le système standard.serviceModel section de configuration?

Voici ce que mon web côté client.config ressemble à la référence:

    <system.serviceModel>
    <diagnostics>
        <messageLogging logEntireMessage="true" logMalformedMessages="true"
         logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" />
    </diagnostics>
    <behaviors>
        <serviceBehaviors>
            <behavior name="includeExceptions">
                <serviceDebug includeExceptionDetailInFaults="true"/>
                <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
            </behavior>
        </serviceBehaviors>
    </behaviors>
    <bindings>
        <netTcpBinding>
            <binding name="NetTcpBinding_Default" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="Infinite" sendTimeout="01:00:00" portSharingEnabled="true" transferMode="Buffered" maxReceivedMessageSize="2147483647">
                <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
                <security mode="Transport">
                    <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign"/>
                </security>
            </binding>
        </netTcpBinding>
    </bindings>

</system.serviceModel>

OriginalL'auteur RubyHaus | 2009-08-05