Je suis aux prises avec ce service WCF duplex qui effectue des appels au service pour obtenir de grandes quantités de données. J'utilise wsDualHttpBinding qui fonctionne mais qui est très lent. J'ai profilé et la plupart du temps est utilisé par les sérialiseurs et le processus d'authentification. J'ai donc décidé d'utiliser l'Encodage Binaire et de changer la Sécurité en Transport et comme c'est une application intranet, le chiffrement n'est pas nécessaire.WCF CustomBinding Duplex échoue à ouvrir le port client
<wsDualHttpBinding>
<binding name="CRMXServiceDualBinding" sendTimeout="00:10:00"
maxBufferPoolSize="50524288" maxReceivedMessageSize="50000000"
messageEncoding="Mtom">
<readerQuotas maxDepth="50000000" maxStringContentLength="50000000"
maxArrayLength="50000000" maxBytesPerRead="50000000" maxNameTableCharCount="50000000" />
<reliableSession ordered="true" inactivityTimeout="00:30:00" />
<security mode="Message">
<message clientCredentialType="Windows" negotiateServiceCredential="true" />
</security>
</binding>
</wsDualHttpBinding>
J'ai donc essayé de composer cette liaison personnalisée.
<customBinding>
<binding name="DuplexBindingConfig">
<compositeDuplex />
<oneWay maxAcceptedChannels="128" packetRoutable="false">
<channelPoolSettings idleTimeout="00:10:00" leaseTimeout="00:10:00"
maxOutboundChannelsPerEndpoint="10" />
</oneWay>
<binaryMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
</binaryMessageEncoding>
<httpTransport manualAddressing="false" maxBufferPoolSize="2147483647"
maxReceivedMessageSize="2147483647" allowCookies="false" authenticationScheme="Negotiate"
bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
keepAliveEnabled="true" maxBufferSize="2147483647" proxyAuthenticationScheme="Anonymous"
realm="" transferMode="Buffered" unsafeConnectionNtlmAuthentication="false"
useDefaultWebProxy="true" />
</binding>
</customBinding>
Maintenant, je suis confronté à deux problèmes: 1. Pour tester le serveur de développement ASP.Net, il retourne immédiatement l'erreur: « La requête HTTP est non autorisé avec système d'authentification client « Negotiate » L'en-tête d'authentification reçue. du serveur était 'NTLM'. " 2. Test sur IIS6, l'appel n'atteint jamais le serveur. Mon Hunch est que le port client n'est pas ouvert.
S'il vous plaît, merci .. Merci d'avance.
* BTW j'utilise Windows XP SP3, Framework 3.5 SP1, VS2008
Merci Andrew pour la réponse rapide. Est-il possible que je peux utiliser Binary Encoder avec une configuration similaire à wsDualHttpBinding ci-dessus avec Encryption Off .. afin que j'obtienne de meilleures performances. La performance du wsDualHttpBinding actuel est très lente. – Bhuvan
Dans votre message, vous dites que vous avez changé de la sécurité au niveau du message à Transport. Changez simplement la sécurité en aucune. Ensuite, vous devriez pouvoir avoir Duplex sur HTTP en utilisant un encodeur binaire. –
Merci Andrew pour la suggestion .. HTTPTransport ne prend pas en charge aucun .. à la place soutenir anonyme. Mais cette option saute l'authentification tous ensemble .. et j'ai besoin d'informations d'utilisateur (authentification) pour être disponible. J'ai dû faire une solution de contournement en passant UserName en tant qu'un en-tête personnalisé et en l'utilisant dans le Gestionnaire d'autorisations. Je crois que ce n'est pas une bonne solution .. mais pour l'instant ça marche. Je suis toujours à la recherche de la bonne solution .. où j'ai besoin d'authentification .. et établir le contexte .. une fois par session .. sur un service duplex .. sur un canal léger qui est rapide. – Bhuvan