Question

Nous avons une application assez importante mon équipe et moi sommes en développement qui contient un certain nombre de services basés sur NetTcp WCF. Le service Windows, ce système sera en cours d'exécution sous ne sera pas un compte local, mais un utilisateur standard de domaine (avec des privilèges d'administrateur sur les serveurs hébergeant le service). Au milieu de tester la connectivité je suis tombé sur un problème où les appels SSPI échouent. Sur la base de quelques heures de recherche, cela m'a conduit sur le chemin de me manque la ligne suivante de ma config client:

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

Le problème est que j'utiliser ce ne l'utilise pas ou VS svcutil pour générer un client / proxy pour ce service - les procurations utilisées sont complètement écrits dans le code et ils hériteront System.ServiceModel.ClientBase. Je crois que la raison initiale de cette option a été retenue était que nous puissions utiliser les mêmes objets de DataMember exacts qui passent à travers les services de part et d'autre de la clôture - troisième groupes de parties ne seront pas besoin de se connecter à nos services pour ce n'était pas un problème .

Quelqu'un sait-il un moyen pour moi de mettre en userPrincipalName dans le client (code ou par une config) quand je n'ai pas points d'extrémité spécifiés dans la section configuration standard de system.serviceModel?

Voici ce que mon web.config côté client ressemble de 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>
scroll top