IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Services Web Discussion :

Uploader des fichiers en utilisant MTOM


Sujet :

Services Web

  1. #1
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 122
    Par défaut Uploader des fichiers en utilisant MTOM
    Bonjour,

    Je veux faire un web service qui recoit des fichier en utilisant MTOM, pour cela, j'ai fais comme suite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    [WebMethod]
        public void Upload(string FileName, byte[] buffer, long Offset)
        {		
            string FilePath = Path.Combine(UploadPath, FileName);
     
            using (FileStream fs = new FileStream(FilePath, FileMode.Open, FileAccess.ReadWrite, FileShare.Read))
            {
                fs.Seek(Offset, SeekOrigin.Begin);
                fs.Write(buffer, 0, buffer.Length);
            }
     
        }
    j'ai une erreur en sortie :
    System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.UnauthorizedAccessException: Access to the path 'C:\MTOM\AA' is denied.
    at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
    at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy)
    at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)
    at MTOM.Service1.Upload(String FileName, Byte[] buffer, Int64 Offset) in C:\Documents and Settings\Administrateur\Bureau\MTOM\MTOM\MTOM.asmx.cs:line 41

    merci d'avance de votre aide.

  2. #2
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 122
    Par défaut
    J'ai réussi à trouver, j'ai fais comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    [WebMethod]
        public void Upload(string FileName, byte[] buffer)
        {
            string FilePath = Path.Combine(UploadPath, FileName);
            StreamWriter Fichier = new StreamWriter(FilePath, true, Encoding.Default);
            Fichier.Close();
     
            using (FileStream fs = new FileStream(FilePath, FileMode.Open, FileAccess.ReadWrite, FileShare.Read))
            {
               fs.Seek(256, SeekOrigin.Begin);
               fs.Write(buffer, 0, buffer.Length);
            }     
     
        }
    pour ajouter le service MTOM, j'ai ajouté les ligne ci dessous dans le webconfig.xml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <webServices>
          <soapExtensionImporterTypes>
            <add type="Microsoft.Web.Services3.Description.WseExtensionImporter, 
                   Microsoft.Web.Services3, Version=3.0.0.0, 
                   Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
          </soapExtensionImporterTypes>
        </webServices>

    Quand je passe des fichiers plus de 4Mo, j'ai l'exception suivante :
    Une erreur s’est produite lors de la réception de la réponse HTTP à http://localhost:3687/MTOM.asmx. La raison peut en être que la liaison de point de terminaison de service n’utilise pas le protocole HTTP. Cela peut également être dû au fait qu’un contexte de demande HTTP a été ignoré par le serveur (peut-être à cause de l’arrêt du service). Pour plus d’informations, voir les journaux du serveur.
    Merci d'avance de votre aide.

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 122
    Par défaut
    Bonjour,

    Une dernière question, est ce que le client doit disposer de WSE 3.0 installé afin d'envoyer le fichier en MTOM ? merci d'avance de votre réponse.

  4. #4
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Si tu développes de nouveaux webservices, il vaut mieux utiliser WCF qui est plus flexible pour ce genre de chose.

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 122
    Par défaut
    Citation Envoyé par Nathanael Marchand Voir le message
    Si tu développes de nouveaux webservices, il vaut mieux utiliser WCF qui est plus flexible pour ce genre de chose.
    D'accord, est ce que la consommation d'un web service sur le protocole MTOM se fait normalement ? ou il faut installer WSE 3.0 ? merci d'avance du retour.

  6. #6
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Le Mtom est une norme donc elle doit etre interoperable dans d'autres languages normalement (java, php, etc) sans installer la dll

  7. #7
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 122
    Par défaut
    Bonsoir,

    j'ai fais un test en supprimant les balises de WSE dans le fichier web config.xml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
     
     <webServices>
          <soapExtensionImporterTypes>
            <add type="Microsoft.Web.Services3.Description.WseExtensionImporter, 
                   Microsoft.Web.Services3, Version=3.0.0.0, 
                   Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
          </soapExtensionImporterTypes>
        </webServices>
     
    <microsoft.web.services3>
        <messaging>
          <mtom clientMode="always"/>
        </messaging>
      </microsoft.web.services3>
    je viens d'apercevoir que le temps de transfert est le même!, pour transférer 1000 fichiers PDF de 1,42Mo la durée de transfert est 1132 sec est c'est la même durée sans MTOM, est ce que j'ai oublié quelque chose? merci d'avance de votre aide.

  8. #8
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Salut,

    Bizarre, ton implémentation ne ressemble pas trop à ce qui se trouve sur la MSDN: http://msdn.microsoft.com/en-us/library/aa528818.aspx

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  9. #9
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Par défaut
    Utilises WCF et l'encodage MTOM.
    WCF supporte 3 type d'encodage de message:Text, Binaire et MTOM.
    http://msdn.microsoft.com/en-us/library/aa751889.aspx

    Pour utiliser MTOM tu devras le spécifier dans le fichier de config (et jouer sur les tailles des messages, buffers, etc., notemment le maxArrayLength coté client)
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <bindings> 
                <wsHttpBinding> 
                    <binding name="wsWithMTOM" maxReceivedMessageSize="665536" messageEncoding="Mtom"/> 
                </wsHttpBinding> 
    </bindings>

    Tu as des exemples ici:
    http://msdn.microsoft.com/en-us/library/ms751514.aspx (cherche MTOM dans les fichiers téléchargés)

    Voici les sources de l'exemple concernant MTOM

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    namespace Microsoft.ServiceModel.Samples
    {
        // Service contract for an upload service
        [ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")]
        public interface IUpload
        {
            [OperationContract]
            int Upload(Stream data);
        }
     
        // An upload service which takes a Stream and returns its size
        public class UploadService : IUpload
        {
            public int Upload(Stream data)
            {
                int size = 0;
                int bytesRead = 0;
                byte[] buffer = new byte[1024];
     
                // Read all the data from the stream
                do
                {
                    bytesRead = data.Read(buffer, 0, buffer.Length);
                    size += bytesRead;
                } while (bytesRead > 0);
                data.Close();
     
                return size;
            }
        }
    }

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.serviceModel>
        <bindings>
          <wsHttpBinding>
            <binding name="WSHttpBinding_IUpload" messageEncoding="Mtom"/>
          </wsHttpBinding>
        </bindings>
        <services>
          <service 
              name="Microsoft.ServiceModel.Samples.UploadService"
              behaviorConfiguration="UploadServiceBehavior">
            <!-- IUpload is exposed at the base address provided by host: http://localhost/servicemodelsamples/service.svc  -->
            <endpoint address=""
                      binding="wsHttpBinding"
                      bindingConfiguration="WSHttpBinding_IUpload" 
                      contract="Microsoft.ServiceModel.Samples.IUpload" />
            <!-- the mex endpoint is exposed at http://localhost/servicemodelsamples/service.svc/mex -->
            <endpoint address="mex"
                      binding="mexHttpBinding"
                      contract="IMetadataExchange" />
          </service>
        </services>
     
        <!--For debugging purposes set the includeExceptionDetailInFaults attribute to true-->
        <behaviors>
          <serviceBehaviors>
            <behavior name="UploadServiceBehavior">
              <serviceMetadata httpGetEnabled="True"/>
              <serviceDebug includeExceptionDetailInFaults="False" />
            </behavior>
          </serviceBehaviors>
        </behaviors>
     
      </system.serviceModel>
     
    </configuration>
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

Discussions similaires

  1. Upload des fichier avec AJAX
    Par Pedro Varela dans le forum ASP.NET
    Réponses: 6
    Dernier message: 23/01/2007, 07h52
  2. download et upload des fichier avec JSP & mysql
    Par MSM_007 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 17/07/2006, 15h20
  3. upload des fichiers dans mon serveur
    Par abdou.sahraoui dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 29/05/2006, 09h32
  4. upload des fichiers
    Par abdou.sahraoui dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 19/04/2006, 07h02
  5. Uploader des fichiers via ssh
    Par Michaël dans le forum Réseau
    Réponses: 3
    Dernier message: 13/05/2005, 20h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo