J'essaie de passer une chaîne longue (24 000 à 50 000 caractères) à un service WCF auto-hébergé TCP.
J'ai augmenté la maxStringContentLength (partout) à 22008192.
J'ai lu quelque part que je devais changer le bindingConfiguration en "LargeBuffer" ou "LongFields" mais quand je fais ceci:
<endpoint address="" binding="netTcpBinding" bindingConfiguration="LongFields"
contract="ExStreamWCF.IService1">
ou ca:
<endpoint address="" binding="netTcpBinding" bindingConfiguration="LargeBuffer"
contract="ExStreamWCF.IService1">
Mon service ne va pas commencer. J'ai vraiment besoin de cette erreur pour partir. Des idées?
Merci,
Jason
PS - Fichier de configuration du service TCP sur le serveur:
<system.serviceModel>
<services>
<service behaviorConfiguration="ExStreamWCF.Service1Behavior"
name="ExStreamWCF.Service1">
<endpoint address="" binding="netTcpBinding" bindingConfiguration=""
contract="ExStreamWCF.IService1">
<identity>
<dns value="Devexstream-2.anchorgeneral.local" />
<!--<dns value="vmwin2k3sta-tn2" />-->
</identity>
</endpoint>
<endpoint address="mex" binding="mexTcpBinding" bindingConfiguration=""
contract="IMetadataExchange" />
<Host>
<baseAddresses>
<add baseAddress="net.tcp://Devexstream-2:8080/Service" />
<!--<add baseAddress="net.tcp://vmwin2k3sta-tn2:8080/Service" />-->
</baseAddresses>
</Host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="ExStreamWCF.Service1Behavior">
<serviceMetadata httpGetEnabled="false" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
EDIT: Reliures à la demande
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="NetTcpBinding_IService1" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"
hostNameComparisonMode="StrongWildcard" listenBacklog="10" maxBufferPoolSize="524288"
maxBufferSize="2565536" maxConnections="10" maxReceivedMessageSize="2565536">
<readerQuotas maxDepth="22008192" maxStringContentLength="22008192" maxArrayLength="2516384"
maxBytesPerRead="22008192" maxNameTableCharCount="22008192" />
<reliableSession ordered="true" inactivityTimeout="00:10:00"
enabled="false" />
<security mode="Transport">
<transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
<message clientCredentialType="Windows" />
</security>
</binding>
</netTcpBinding>
</bindings>
Points de terminaison client:
<client>
<endpoint address="net.tcp://devexstream-2:8080/Service" binding="netTcpBinding"
bindingConfiguration="NetTcpBinding_IService1" contract="TCPService.IService1"
name="NetTcpBinding_IService1">
<identity>
<servicePrincipalName value="TCPService\Devexstream-2" />
<dns value="Devexstream-2.anchorgeneral.local" />
</identity>
</endpoint>
J'ai modifié le service (comme suit), mais le service ne démarre pas maintenant. Le nouveau app.config:
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="ExStreamWCFBinding" closeTimeout="00:00:05" openTimeout="00:00:05" receiveTimeout="00:00:05" sendTimeout="00:00:05" transferMode="Buffered" transactionProtocol="OleTransactions" hostNameComparison="StrongWildCard" maxBufferPoolSize="524288" maxBufferSize="524288" maxConnections="10" maxReceivedMessageSize="5242880">
<readerQuotas maxDepth="32" maxStringContentLength="5242880" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
</binding>
</netTcpBinding>
</bindings>
<services>
<service behaviorConfiguration="ExStreamWCF.Service1Behavior"
name="ExStreamWCF.Service1">
<endpoint address="" binding="netTcpBinding" bindingConfiguration="ExStreamWCFBinding"
contract="ExStreamWCF.IService1">
<identity>
<dns value="Devexstream-2.anchorgeneral.local" />
<!--<dns value="vmwin2k3sta-tn2" />-->
</identity>
</endpoint>
<endpoint address="mex" binding="mexTcpBinding" bindingConfiguration=""
contract="IMetadataExchange" />
<Host>
<baseAddresses>
<add baseAddress="net.tcp://Devexstream-2:8080/Service" />
<!--<add baseAddress="net.tcp://vmwin2k3sta-tn2:8080/Service" />-->
</baseAddresses>
</Host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="ExStreamWCF.Service1Behavior">
<serviceMetadata httpGetEnabled="false" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
Le nom que vous attribuez à l'élément netTcpinding doit être associé à bindingConfiguration - "LargeBuffer" ou "LongFields" ne veut rien dire à moins que le fichier de configuration ne contienne un élément de liaison portant ce nom. C’est la raison pour laquelle votre service ne démarre pas lorsque vous mettez cette information - vous avez probablement un message d’erreur de configuration, je parie.
Pour remplacer le paramètre par défaut pour maxStringContentLength, procédez comme suit:
Si vous ne spécifiez pas de configuration de liaison pour le noeud final, le service utilisera les valeurs par défaut.
Par exemple, prenez votre fichier de configuration ci-dessus. Sous la balise, ajoutez la configuration de liaison suivante (notez que vos valeurs spécifiques et les attributs facultatifs utilisés varient en fonction des besoins de votre service):
<bindings>
<netTcpBinding>
<binding name="ExStreamWCFBinding" closeTimeout="00:00:05" openTimeout="00:00:05" receiveTimeout="00:00:05" sendTimeout="00:00:05" transferMode="Buffered" transactionProtocol="OleTransactions" hostNameComparison="StrongWildCard" maxBufferPoolSize="524288" maxBufferSize="524288" maxConnections="10" maxReceivedMessageSize="5242880">
<readerQuotas maxDepth="32" maxStringContentLength="5242880" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
</binding>
</netTcpBinding>
</bindings>
Ensuite, lorsque vous définissez le noeud final:
<endpoint address="" binding="netTcpBinding" bindingConfiguration="ExStreamWCFBinding" contract="ExStreamWCF.IService1">
MODIFIÉ À AJOUTER
Selon vos informations supplémentaires, associez l'attribut bindingConfiguration à la valeur "NetTcpBinding_IService1" sur le noeud final de votre service.
Parfois, changer la valeur "maxStringContentLength" au maximum risque de ne pas aider.hence Ajoutez la liaison "par défaut" ci-dessous dans la section "basicHttpBinding" du fichier de configuration du serveur.
<binding >
<readerQuotas maxDepth="32" maxStringContentLength="102400" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
</binding>