Ce qui est différent avec PushStreamContent entre l'api web & web api 2?
J'ai créé deux identiques web api projets, l'un en VS 2012 et une autre en VS 2013, à la fois vers le 4.5 .net framework. Les projets sont basés sur Filip W de téléchargement de vidéo tutoriel trouvé ici:
http://www.strathweb.com/2013/01/asynchronously-streaming-video-with-asp-net-web-api/
Copie & coller le code du tutoriel dans le VS 2012 projet (à l'aide de l'api web de 1?) ne produit pas d'erreurs (après j'ai ajouter le bon usage des déclarations).
Cependant, lorsque j'ai suivi les mêmes étapes que dans le VS 2013 projet-je obtenir les deux erreurs suivantes:
Erreur 1
L'appel est ambigu entre les méthodes suivantes ou des propriétés:
'PushStreamContent(Système D'.Func<Stream,HttpContent,TransportContext,Task>
, MediaTypeHeaderValue)'
et
'PushStreamContent(Système D'.Action<System.IO.Stream,HttpContent,TransportContext>
, MediaTypeHeaderValue)'Erreur 2
"void video_stream.Les contrôleurs.VideoStream.Méthodes Writetostream(Système D'.IO.Flux, Système.Net.Http.HttpContent, Système.Net.TransportContext)' a le mauvais type de retour
Donc je suppose que l'erreur 2 est le réel problème de ce code:
public async void méthodes writetostream(Flux outputStream, HttpContent contenu, TransportContext contexte) {...}
N'est pas identifié comme un <action>
plus entre l'api web de 1 & 2?? Je suis vraiment confus ici que je suis ciblant le même cadre, et je n'arrive pas à l'intuition sur la façon de le résoudre. Mes tentatives de changer les méthodes writetostream signature ont tous échoué.
Quelqu'un a une idée sur ce dont j'ai besoin pour obtenir PushStreamContent à accepter les méthodes writetostream web api 2 ou VS 2013 ou le C# ou à l'endroit où la différence de ce code de vie?
OriginalL'auteur huxley | 2013-11-17
Vous devez vous connecter pour publier un commentaire.
Je ne suis pas sûr si c'est un bug dans l'API Web, nous allons étudier. En attendant, vous pouvez essayer la solution de contournement suivante:
Note: j'ai fait un autre changement(enlevé le bloc catch) le code de façon à permettre des exceptions à se propager. C'est ainsi qu'à vos clients de savoir que certains d'erreur qui est arrivé au service de quoi ils assument tout s'est passé en douceur.
Je suis arriver: Le processus ne peut pas accéder au fichier. I/O erreur de .net
OriginalL'auteur Kiran Challa
La signature de la PushStreamContent constructeur changé. Son onStreamAvailable paramètre est une Action ou Func type générique. Le problème, c'est que le compilateur ne sait pas quel type de lier à.
Pour résoudre l'erreur de casting de la streamAvailableHandler comme une Action:
Et le gestionnaire de la méthode:
OriginalL'auteur Bill Heitstuman
C'est un problème connu avec le C# spec. Découvrez cette SORTE de question - Compilateur Ambigu invocation d'erreur - anonyme méthode et la méthode de groupe avec la touche Func<> ou Action
Lorsque nous avons lancé cette surcharge qui retourne une Tâche, nous avons fait réaliser que c'est une source de niveau de modification de rupture (mais cela ne veut pas casser la compatibilité binaire). Nous avons toujours allé de l'avant avec le changement que pas de fixation, il pourrait causer plus de problèmes.
Et sur la façon de résoudre ce problème, vous avez deux options -
Vous pouvez utiliser un cast explicite, comme ci-dessous,
réponse.Contenu = new PushStreamContent((Action)en vidéo.Méthodes writetostream, de nouvelles MediaTypeHeaderValue("vidéo/"+ext));
BTW, attention avec qui
async void
méthode. Je vous suggère de changer sa signature àOriginalL'auteur RaghuRam Nadiminti
Comme sujjested par RaghuRam Nadiminti, en changeant les méthodes writetostream type de retour de void à la Tâche, la compilation fonctionne correctement et que vous n'aurez pas besoin d'une conversion explicite.
public async Task méthodes writetostream(Flux outputStream, HttpContent contenu, TransportContext contexte);
OriginalL'auteur Aissa Saoudi
C'était ma solution de contournement: si l'appel est ambigu, juste de voter pour elle:
OriginalL'auteur reiherric