2010-07-29 6 views
2

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

Répondre

4

Je peux voir un problème:

Vous ne pouvez pas utiliser la sécurité au niveau de transport sur un duplex http obligatoire, même un duplex personnalisé http liant .

Le client écoutera via un port d'écoute de port générique (c'est-à-dire, qui n'est pas un service Web) et ne comprendra pas les détails requis pour que le protocole SSL fonctionne.

+0

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

+0

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. –

+1

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

Questions connexes