2009-06-21 6 views
2

J'ai un problème unique et je voudrais pouvoir traiter une requête HTTP POST entrante contenant des données binaires arbitraires.Service WCF avec données binaires

Je peux actuellement traiter ces données en utilisant un gestionnaire de page ASP.NET standard ou dans un service Web ASP, mais je veux savoir s'il est possible de traiter les données binaires INCOMING dans un service WCF? Puis-je explorer la pile de traitement WCF pour contourner le traitement SOAP et gérer le message brut dans mon propre code? Je comprends que cela brise la publication de «contrat» de la WCF (WSDL), mais je m'en fous.

-Jeff

Répondre

-1

Après avoir passé quelques semaines sur ce problème, je assez bien une réponse définitive:

Pouvez-vous remplacer XML/SOAP avec un sérialisation binaire personnalisé pour WCF?

La réponse courte: non

La longue réponse: oui, mais vous devez réécrire presque toutes les interfaces de la couche de transport de sorte que vous pourriez tout aussi bien créer un IHttpHandler de mesure et d'éviter WCF tous ensemble.

Microsoft, en essayant de suivre la norme SOAP (et la norme est responsable de ce problème à mon avis) rompt l'une des règles de programmation simples -> séparation des responsabilités dans les couches. WCF/SOAP peut sembler être un protocole et un transport élégamment stratifié, mais la réalité est qu'il existe des connexions complexes entre les couches. Cela signifie que WCF est un protocole de communication extrêmement complexe qui fournit des fonctionnalités de transport, de sécurité, de fiabilité, de publication, de sérialisation et autres qui sont toutes interdépendantes à un certain niveau. Si tout ce que vous voulez est un canal de transport, WCF/SOAP ajoute énormément de complexité.

Je suis sûr que je pourrais lancer d'énormes diatribes à propos de SOAP oui/non, mais j'ai finalement réalisé que WCF/SOAP n'est pas ce dont j'avais besoin pour mon application.

-Jeff

+1

Vous avez totalement tort. Où trouvez-vous cette merde? Que diriez-vous de netTcpBinding ou des autres liaisons qui utilisent binaire? Je ne sais pas quelles recherches vous avez faites, mais vous avez fait un sacré boulot. –

+0

Ok, excuses ... Je me rends compte que mon autre poste mentionné silverlight, celui-ci n'a pas. Vous avez raison John, il y a des bindings binaires WCF SI vous n'êtes pas dans Silverlight, mon mauvais. -Jeff – Jeff

0

Tant que je sais que vous pouvez configurer le service de liaison: http://www.c-sharpcorner.com/UploadFile/pjthesedays/bindwcf05032009012251AM/bindwcf.aspx

Utilisation du netTcpBinding

+0

Tout d'abord, après avoir lu l'article mentionné et d'autres, je ne crois pas l'encodage « binaire » est des données binaires arbitraires. Je crois à son encodage 'binaire' de XML/SOAP. Ensuite, si c'est ce que je cherche, Silvelight ne le supporte pas, ce que j'ai oublié de mentionner dans une exigence. – Jeff

2

Vous pouvez utiliser le streaming MSDN

+0

Après enquête, je crois que cela pourrait résoudre le problème. Un contrat de streaming me permet d'envoyer juste un morceau de données et ne semble pas exiger ou utiliser un emballage ou un codage XML. Il a quelques détracteurs, mais il devrait correspondre à mes exigences. – Jeff

2

Pensez à utiliser MMD. MTOM est un mécanisme permettant de transmettre des pièces jointes binaires volumineuses avec des messages SOAP en tant qu'octets bruts, ce qui permet d'envoyer des messages plus petits. Pour plus de détails voir:

http://msdn.microsoft.com/en-us/library/aa395209.aspx

+0

Non disponible actuellement dans Silverlight et j'essaye d'éviter tout encodage XML. – Jeff