2017-03-08 3 views
0

Je souhaite télécharger l'image du service javascript vers wcf à l'aide d'un message, datacontract. Je lis dans google, utiliser le contrat de données n'est pas possible, cela peut être fait avec un contrat de message, car lorsqu'un paramètre est un flux, il ne devrait pas avoir d'autre paramètre.Téléchargement de l'image avec l'ID utilisateur pour le service wcf à l'aide de datacontract

Cependant, dans certains liens, il est mentionné que cela peut être fait en passant le paramètre dans la chaîne querys. (ex: WCF Restful service file upload with multi-platform support) J'ai essayé cela, en recevant toujours une erreur disant que si stream est là en paramètre, il ne devrait pas contenir d'autre paramètre. Mais ce n'est pas possible même avec une chaîne de requête? Ce qui suit est mon code

[OperationContract] 
    [WebInvoke(Method = "POST",UriTemplate = "/UploadFile/userId={userId}", BodyStyle = WebMessageBodyStyle.WrappedRequest)] 
    void UploadFile(string userId,Stream uploadingDetails); 

Répondre

0

Le paramenter Stream devrait être dernier paramètre dans votre contrat d'exploitation. Si vous utilisez v3.5 ou 4.0, vous verrez cette erreur. Mais vous pouvez l'ignorer. Ou bien vous pouvez essayer de faire comme:

[DataContract] 
public class UploadData 
{ 
    [DataMember] 
    string userId { get; set; } 

    [DataMember] 
    Stream uploadingDetails { get; set; } 
} 

public class YourService : IYourService 
{ 

    public bool UploadFile(UploadData request) 
    { 
    } 
} 

ou si vous avez une option supplémentaire lors de l'utilisation Stream, juste essayer d'éviter .svc dans ur url. ajoutez le code ci-dessous:

public class Global : System.Web.HttpApplication 
{ 
    RouteTable.Routes.Add(new ServiceRoute("yourApp/yourService/upload", new WebServiceHostFactory(), typeof(YourService))); 
} 

et décorer l'attribut ci-dessous pour votre service:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 

et appelez votre service comme ci-dessous:

http://localhost:123456/yourApp/yourService/upload/{userId} 
+0

Salut, Votre premier exemple de code na pas me aider comme je reçois toujours la même erreur. Pourriez-vous s'il vous plaît me fournir un exemple de code complet (et aussi comment appeler le formulaire javascript s'il vous plait), pour d'autres échantillons également. Merci . –