none
modifier content-length dans le header du flux envoyer a un web service RRS feed

  • Question

  • Bonjour,

    je cherche un moyen de changer l'artribut 'content-length' dans le header du flux envoyer par le web service.
     
    information technique:
    - Miscrosoft 2000 et IIS
    - Visual Web Developer 2005 Express
    - FrameWork 2
    explication:
    J'ai un echec lors d'un appel a un service. L'entreprise partenaire m'informe que ma requette échoue car le 'content-length' de mon envoie ne correspond pas (Corrigé manuellement et rejouée, ma requette fonctionne).

    merci
    mardi 17 août 2010 11:56

Toutes les réponses

  • mardi 17 août 2010 14:11
    Auteur de réponse
  • Merci de ta reponse,

    Effectivement la classe WebWebOperationContext.Current.OutgoingResponse/Request semble exploitable. Malheureusement je ne remplis pas 2 conditions:

    - a partir de FrameWork 3.5

    - pas pour Miscrosoft 2000

    Ma production est sur un serveur acceptable pour WebWebOperationContext mais j'ai une echéance au 1er septembre et je n'ai pas trop le temps pour une migration materiel (en recette) et une migration de version en recette et production (j'ai verifié trop de fonction deprecated). M'enfin dans le pire des cas je garde cette solution en reserve. Merci 

     

     

     

    mercredi 18 août 2010 08:49
  • Bonjour,

    en effet ca marchera moins bien :) désolé j'ai du lire trop vite.
    Avec cette ligne dans le webservice ca marche pas ??

     this.Context.Response.AddHeader("Content-Length", longueur)


    Xavier VANNESTE
    www.xvanneste.com
    media.xvanneste.com
    blog.xvanneste.com
    mercredi 18 août 2010 18:29
    Auteur de réponse
  • Merci, je n'ai pas la main sur le client du web service directement. j'utilise le web service comme suit:
    1) dans le web.config:
    <configuration>
      <appSettings>
     <add key="fr.RechercheGTAService" value="http://adresseSocieteExterieur.fr/d8mjws/servlet/services/leService"/>
      </appSettings>
    ...
     <system.web>
      <compilation debug="true">
       <assemblies>
        <add assembly="System.Web.Services, Version=2.0.0.0, Culture=neutral,

    PublicKeyToken=B03F5F7F11D50A3A"/>
    ...
       </assemblies>
      </compilation>
    ...
     </system.web>
    <configuration>

    la partie WebService du web.config se limite la.

    2) Dans le projet:
    les WebService sont definit par les fichiers:
    - leService.discomap
    - leService.wsdl
    - leService.xsd

    - leService.discomap, introduit les deux autres et est propre a Window:
      <Results>
        <DiscoveryClientResult referenceType="System.Web.Services.Discovery.ContractReference"

    url="http://adresseSocieteExterieur.fr/d8mjws/servlet/services/leService?wsdl" filename="leService.wsdl" />
        <DiscoveryClientResult referenceType="System.Web.Services.Discovery.SchemaReference"

    url="http://adresseSocieteExterieur.fr/d8mjws/servlet/services/leService?xsd=Types.xsd" filename="leService.xsd" />
      </Results>

    les 2 derniers sont recuperés aupres du serveur (partenaire)

    3)- j'importe un package
    -je declare et instencie les classes du WebService
    -et utilise les methodes d'apelle de service

    -> en gros la base du WebService

    Tout marche tres bien depuis des mois...

    il y a quelques jours l'entreprise partenaire a fait des modifications de son cotés, désolé mais j'ai pas les details...
    Mes apels ne passent presque plus, les appel contenant peu d'information passent, mais ceux contenant un complement d'information ne passent plus...

    Apres quelque tests, mes partenaires me signalent:
    [quote="Partenaire"]en rejouant votre flux, il repasse. Néanmoins, en y ajoutant les headers presents,  j'ai bien la même erreur que vous : le pb vient de ce que vous envoyez dans les header au niveau de la donnée content-length :
    Headers: {content-type=[text/xml; charset=utf-8]..., content-length=[4146], x-forwarded-host=...

    une longueur de flux max est envoyée, ce qui fait que votre flux est coupé par notre serveur.
    Il faut donc que vous modifiez cette donnée (ou la supprimiez).[/quote]

    Personnellement je comprend pas trop pourquoi le content-length serait faux sauf si 4146 est un maximum fixé en dur a l'époque de la FrameWork 2.  J'ai donc essaier la FrameWork 4

    mon test d'amélioration de FrameWork etait directement sur la version 4. Apparement elle n'a pas les meme fondement que la 3.5. Je vais refaire un test en 3.5 qui n'ajouterai apparement que des bibliotheque a la version 2 et serait compatible sans 'deprecier'.

    Une autre solution est de fabriquer un client. M'enfin euh, ca fait peu etre beaucoup la :( .

    la troisieme solution: trouvé le moyen d'implementer en partie le service client de FrameWork:
    implementer en surchargement l'existant et en en forcant l'usage
    finalement l'idéal serait le parametrage dynamique du service client de FrameWork.

    Une solution temporaire me permet de réduire les informations de mon appel, ce que je met actuellement en place. Mais cette solution ne peut etre que provisoire.

    voila exactement l'ensemble de la situation

    System.ServiceModel.Web semble contenir plus de possibilite que les bibliotheques System.Nets, System.Web.Services, en esperant que ma solution s'y trouve

     

    jeudi 19 août 2010 12:49
  • Je comprend plus ou est le client et ou est le web services??

    ma ligne est dans le webservice pas le client ce qui est normal.

    Pour le client ca aurait ete request pas response


    Xavier VANNESTE
    www.xvanneste.com
    media.xvanneste.com
    blog.xvanneste.com
    jeudi 19 août 2010 14:39
    Auteur de réponse
  • Desole je suis pas  clair:

    - je travaille cote client

    - je n'ai rien fabriquer du webservice

    - je n'ai pas fabriquer le client (fournit par FrameWork)

    - je suis simple utilisateur du webservice: declaration dans mon projet et utilisation du service (j'implemente juste une classe et utilise une methode)

     

    vendredi 20 août 2010 08:39