Reposant WCF service de transfert d'image problème
1 namespace Uploader
2 {
3 using System;
4 using System.IO;
5 using System.ServiceModel;
6 using System.ServiceModel.Description;
7 using System.ServiceModel.Web;
8 using System.Drawing;
9 using System.Drawing.Imaging;
10 using System.Net;
11 using System.Xml;
12
13 [ServiceContract(Namespace = "http://Uploader")]
14 public interface IUploaderService
15 {
16 [OperationContract, WebInvoke(Method = "POST",UriTemplate = "File/{fileName}")]
17 bool UploadFile(string fileName, Stream fileContents);
18 }
19
20 [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
21 public class UploaderService : IUploaderService
22 {
23 public bool UploadFile(string fileName, Stream fileContents)
24 {
25 return true;
26 }
27 }
28
29 class Program
30 {
31 static void Main()
32 {
33 var host = new
34 ServiceHost(typeof (UploaderService),
35 new Uri("http://localhost:8080/Uploader"));
36 host.AddServiceEndpoint("Uploader.IUploaderService",
37 new WebHttpBinding(), "").Behaviors.Add(new WebHttpBehavior());
38 try
39 {
40 host.Open();
41 Console.WriteLine(host.BaseAddresses[0].AbsoluteUri + " running.");
42 Console.WriteLine();
43 var uri = "http://localhost:8080/Uploader/file.jpg";
44 var req = WebRequest.Create(uri) as HttpWebRequest;
45 if (req != null)
46 {
47 req.Method = "POST";
48 req.ContentType = "image/jpeg";
49 var reqStream = req.GetRequestStream();
50
51 var imageStream = new MemoryStream();
52 using (var i = Image.FromFile(@"c:\photo.jpg"))
53 i.Save(imageStream, ImageFormat.Jpeg);
54
55 var imageArray = imageStream.ToArray();
56 reqStream.Write(imageArray, 0, imageArray.Length);
57 reqStream.Close();
58 var resp = (HttpWebResponse)req.GetResponse();
59 var r = new XmlTextReader(resp.GetResponseStream());
60 if (r.Read())
61 {
62 Console.WriteLine(r.ReadString());
63 }
64 }
65 Console.WriteLine("Press <ENTER> to quit.");
66 Console.ReadLine();
67 }
68 catch (Exception ex)
69 {
70 Console.WriteLine(ex.Message);
71 Console.ReadKey();
72 }
73 finally
74 {
75 if (host.State == CommunicationState.Faulted)
76 host.Abort();
77 else
78 host.Close();
79 }
80 }
81 }
82 }
83
84
Salut, j'espère que vous pouvez aider....
Je suis entrain de créer une application simple(peut-être la page web) qui ont une INTERFACE utilisateur simple et télécharger des fichiers à partir d'un périphérique externe, l'application/page web sera lancé via l'autorun.inf lorsque l'utilisateur connecte un périphérique en il PC. Le webservice va effectuer le travail complexe de lier le fichier dans le système de gestion de l'etc. Cela permettra à la IL analphabètes utilisateurs qui ne peuvent pas utiliser de fichier explorer d'envoyer des fichiers vers le système de gestion de l'...!
Le problème que j'ai c'est que mon Réparateur service me donne une erreur 400 lorsque le type de contenu est une image/jpeg..
Il fonctionne très bien pour text/plain ou text/xml (voir Blog)
Merci
J
OriginalL'auteur jaimie | 2009-03-20
Vous devez vous connecter pour publier un commentaire.
Vous pouvez essayer de remplacer n'importe quel type de contenu et de télécharger tous les fichiers que l'application/octet-stream, ou text/plain à l'aide d'un IOperationBehavior.
Et vous seriez obligé de modifier votre contrat de Service à ressembler à celui-ci
Bien que, si vous téléchargez à partir d'une page web, ne serait pas que les données soient affichées dans un multipart/form-data format?
Je suis vraiment aimer ce Reposante WCF, il semble bien plus propre et plus mince que la norme de SAVON normes WS-* pour l'interopérabilité. Il y a un grand livre blanc sur la msdn: msdn.microsoft.com/en-us/library/dd203052.aspx pour toute personne qui veut en savoir plus. Merci pour votre aide Ben... J
OriginalL'auteur bendewey