Pergunta

Eu tenho um problema único e gostaria da capacidade de processar uma solicitação de postagem HTTP recebida que contém dados binários arbitrários.

No momento, posso processar esses dados usando um manipulador de página ASP.NET padrão ou em um serviço da Web ASP, mas quero saber se é possível processar dados binários recebidos em um serviço WCF? Posso perfurar a pilha de processamento do WCF para ignorar o processamento do SOAP e lidar com a mensagem bruta em meu próprio código?

Entendo que isso quebra a publicação de 'contrato' do WCF (WSDL, o que for), mas eu realmente não me importo com isso.

-Jeff

Foi útil?

Solução 4

Depois de passar algumas semanas nesse problema, tenho praticamente uma resposta definitiva:

Você pode substituir o XML/SOAP por uma serialização binária personalizada para o WCF?

A resposta curta: não

A resposta longa: sim, mas você precisa reescrever quase todas as interfaces da camada de transporte, para que você possa criar um ihttphandler personalizado e evitar o WCF todos juntos.

A Microsoft, na tentativa de seguir o padrão SOAP (e o padrão é responsável por esse problema na minha opinião) quebra uma das regras de programação simples -> Separação de responsabilidades nas camadas. O WCF/SOAP pode parecer um protocolo e transporte elegantemente em camadas, mas a realidade é que existem conexões complexas entre as camadas. Isso significa que o WCF é um protocolo de comunicação extremamente complexo que fornece transporte, segurança, confiabilidade, publicação, serialização e outros recursos que são interdependentes em algum nível. Se tudo o que você deseja é um canal de transporte, o WCF/SOAP adiciona uma enorme quantidade de complexidade.

Tenho certeza de que poderia iniciar grandes discussões sobre sabão sim/não, mas finalmente percebi que o WCF/SOAP não é o que eu precisava para o meu aplicativo.

-Jeff

Outras dicas

Considere usar o MTOM. O MTOM é um mecanismo para transmitir grandes anexos binários com mensagens de sabão como bytes crus, permitindo mensagens menores. Para detalhes, consulte:

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

Você pode usar streaming Msdn

Contanto que eu saiba que você pode configurar a ligação do serviço:http://www.c-sharpcorner.com/uploadfile/pjthesedays/bindwcf05032009012251am/bindwcf.aspx

Usando o NettcpBinding

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top