C++CLI, modifier le paramètrage d'un client web-service en runtime (HttpBinding)

Messages postés
1098
Date d'inscription
mercredi 22 mars 2006
Statut
Membre
Dernière intervention
22 octobre 2019
-
Bonjour,

Je cherche à modifier la configuration d'un client d'un web-service en C++ (principalement le paramètre "maxArrayLength" des bindings et de préférence en runtime, pour tout un tas de raisons).
Quelqu'un pourrait m'aider ?

Imposé :
Visual Studio 2012 et C++ CLI

En bref :
J'ai un souci avec le paramétrage d'un client de web-service en C++CLI (ou CLR, ou encore C++.NET, je ne sais pas trop comment nommer ça) :
Je n'arrive pas à modifier la configuration "HttpBinding", sachant que (de préférence) je ne dois pas utiliser de fichier XML de configuration (j'ai tout de même un projet de test avec lequel j'en ai un, mais cela ne fonctionne pas). Le paramètre à modifier est "maxArrayLength".
L'idéale serait probablement de modifier la configuration en runtime (voire même de cadrer la config à la taille du fichier).

En détail :
J'ai un web service tout simple me permettant d'envoyer un fichier via un tableau binaire (rien d'exceptionnel quoi).
J'ai récupéré le wsdl et via l'outil wsdl.exe j'ai généré une classe C++.
J'arrive à envoyer via ce web-service un fichier de 15Mo au maximum, mais un collègue a pour tester un client C# avec lequel en modifiant la configuration "maxArrayLength" arrive à envoyer un fichier de 100Mo. On me soutient donc (et a raison) que le problème vient de ma configuration client.
Pour info, voici la configuration (non fonctionnel pour le web-service mais j'arrive à extraire les données dans la partie "appSettings" c'est donc que le lien entre mon programme et ce fichier est plus ou moins existant) :
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="TestParam" value="ValueParam"/>
    <add key="2eme param" value="valeur du 2eme paramètre"/>
  </appSettings>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="NetTcpBinding_IFileTransfer" hostNameComparisonMode="StrongWildcard"
            maxBufferPoolSize="79623599" maxBufferSize="4967295" maxReceivedMessageSize="100623599"
            transferMode="Streamed">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="555555555"
              maxBytesPerRead="4096" maxNameTableCharCount="79623599" />
          <security mode="None" />
        </binding>
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://############/filetransfer.svc"
          binding="basicHttpBinding" bindingConfiguration="NetTcpBinding_IFileTransfer"
          contract="ClientFileTransferServiceReference.IFileTransfer"
          name="NetTcpBinding_IFileTransfer" />
    </client>
  </system.serviceModel>
</configuration>

L'erreur que j'ai (et la lecture des paramètres "TestParam" envoyé dans une console, oui le .h est dans un autre projet, c'est juste pour le test ;) ) :
-> Fichier lue : C:\TFS\Moteur\DataSet\TestsUnitaires\TestsUnitaires.zip
-> Taille du fichier : 30 419 884 oct
Une erreur est survenue durant l'envoi du fichier.
System.Net.WebException: La demande a échoué avec l'état HTTP 413 : Request Entity Too Large.
à System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
à System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
à FileTransfer.Put(FileTransferRequest fileToPush) dans c:\users\vwaurzyczka\documents\visual studio 2012\projects\consoleapplicationtestwstansfert2\consoleapplication2\compilation\fichiers d'en-tête\filetransfer.h:ligne 215
à main(Int32 argc, SByte** argv) dans c:\users\vwaurzyczka\documents\visual studio 2012\projects\consoleapplication1\consoleapplication1\consoleapplication1.cpp:ligne 76

Amicalement
Recherches sur Google = émission de CO²
Recherches sur Ecosia = Plantation d'arbres
Surfez écolo
Afficher la suite