2010-10-06 3 views
0

J'ai un webservice Grails qui prend un fichier binaire en paramètre. Ceci est essentiellement à quoi il ressemble:Comment appeler grails webservice à partir de C#

def index = { 
    switch(request.method){ 
    case "POST": 
    def uploadedFile = request.getFile('file') 
    File f=new File('c:/dev/newfile.tar'); 
    uploadedFile.transferTo(f); 
    //do something with f 
    break 
    } 
} 

Pour tester cela, j'utilisais boucle - comme ceci:

curl -F [email protected] http://localhost:8080/MyWebS/fileWS 

La clé étant que pour Grails de savoir comment obtenir le fichier, j'ai dû définir ce fichier = thefile dans la commande curl.

Comment cela se traduit-il par le fait que C# appelle ce même service Web et lui transmet un fichier. A quoi ressemblerait le fichier? un tableau d'octets?

Répondre

2

La façon la plus simple est d'utiliser l'un des WebClient.UploadFile surcharges:

new WebClient().UploadFile("http://localhost:8080/MyWebS/fileWS", 
          "somefile.tar"); 

Si vous avez besoin de plus de contrôle que qui offre, vous pouvez utiliser HttpWebRequest.

+0

WebClient * fait * multipart/form-data! Incroyable. Je n'étais pas au courant. – dtb

+0

Exactement ce que je cherchais! Merci! – Derek

+1

@Derek, heureux d'aider! @dtb, je ne me suis pas rendu compte qu'il attendrait une charge utile RFC2388 (euh, en fait, je ne savais pas ce que c'était avant de lire votre message supprimé); D'autres lectures suggèrent que 'WebClient.UploadFile' suit une spécification antérieure sur laquelle repose 2388 (RFC1867). C'est peut-être compatible, mais je ne suis pas sûr à 100% de l'entreprise multipart/form-data. ;) (Bien que le HttpWebRequest fasse sûrement l'affaire si la façade de UploadFile échoue.) –

Questions connexes