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
Vous devez vous connecter pour publier un commentaire.
De la création de votre procurations manuellement ne vous empêchent de vous mettre la configuration dans le fichier de configuration; vous avez juste besoin d'exposer le droit surcharge du constructeur dans votre ClientBase dérivées de la classe proxy que les délégués à la droit constructeur dans ClientBase qui prend le nom d'un point de terminaison de regarder dans la configuration.
Cela dit, bien sûr, vous pouvez remplir le point de terminaison de l'identité à travers le code, il vous suffit de créer le bon type de EndpointIdentity dérivée de la classe et de l'attacher à la EndpointAddress objet que vous utilisez lors de l'instanciation de la classe proxy. Quelque chose comme ceci:
Pour quiconque cherche à cette réponse et encore des questions, j'avais besoin d'utiliser "DOMAINE\utilisateur", qui n'a toujours pas de travail. J'ai trouvé que j'ai eu à utiliser "[email protected]" (ou ce que jamais votre pleinement qualifié nom de domaine Active Directory.
OriginalL'auteur tomasr
Bien que je ne suis probablement pas répondre directement à votre question, pour utiliser le même datamember sur les deux côtés de la clôture, vous n'avez pas besoin de créer les procurations manuellement. Ce que vous faites est que vous générez votre procurations à l'aide de svcutil et que vous passez dans la dll qui est votre datamember que /r
e.g
Avec cela, le datamember types ne sont pas répétées dans votre ServiceProxy.cs fichier. Vous pouvez personnaliser cette profondeur en passant wsdl/xsd (véritable contrat première approche), de personnaliser le collectiontypes avec /ct, etc etc.
Cela vous fera économiser de nombreuses heures manuellement l'élaboration de votre proxy, et dans le même temps, d'éviter des problèmes comme ci-dessus, que vous rencontrerez peut-être parce que tout devient alors stock standard.
OriginalL'auteur Ash M