Quanta sobrecarga extra é gerada ao enviar um arquivo por um serviço da Web como uma matriz de bytes?
-
08-06-2019 - |
Pergunta
Esse pergunta e resposta mostra como enviar um arquivo como uma matriz de bytes por meio de um serviço Web XML.Quanta sobrecarga é gerada usando este método para transferência de arquivos?Presumo que os dados sejam mais ou menos assim:
<?xml version="1.0" encoding="UTF-8" ?>
<bytes>
<byte>16</byte>
<byte>28</byte>
<byte>127</byte>
...
</bytes>
Se este formato estiver correto, os bytes deverão primeiro ser convertidos em caracteres UTF-8.Cada um desses caracteres aloca 8 bytes.Os bytes são armazenados em caracteres de base 10, hexadecimais ou binários?Quanto maior o arquivo aparece quando é enviado devido aos dados XML e à codificação de caracteres?A compactação está incorporada aos serviços da web?
Solução
Normalmente, uma matriz de bytes é enviado como uma cadeia base64
codificados, não como bytes individuais em etiquetas.
http://en.wikipedia.org/wiki/Base64
A versão base64
codificado é de cerca de 137% do tamanho do conteúdo original.
Outras dicas
Eu uso este método para alguns webservices corporativos internos, e eu não ter notado qualquer grandes slow-downs (mas isso não significa que ele não está lá).
Você provavelmente poderia usar qualquer uma das inúmeras ferramentas de análise de tráfego de rede para medir o tamanho dos dados, e fazer um julgamento baseado fora isso.
Eu não tenho certeza sobre todos os detalhes (compressão, que codificam, etc), mas eu costumo usar apenas WireShark para analisar o tráfego de rede (ao tentar vários métodos), que, em seguida, permite que você veja exatamente como ele é enviado.
Por exemplo, se ele é comprimido do bloco de dados do pacote não deve ser legível como texto simples ... no entanto se é descompactado, você só vai ver texto simples xml velho ... como você veria com tráfego HTTP, ou mesmo FTP em determinados casos.
Para echo o que Kevin disse, em serviços web .net se você tiver uma matriz de bytes é enviado como uma string base64 codificado por padrão. Você também pode especificar a codificação da matriz de bytes de antemão.
Obviamente, uma vez que chega ao servidor (ou cliente) que você precisa para decodificar manualmente a volta string em um array de bytes como isso não for feito automagicamente para você, infelizmente.
O principal impacto no desempenho não vai ser a partir da transferência do arquivo codificado, ele vai ser no processamento que o servidor tem que fazer para codificar o arquivo de pré-transferência (a menos que os arquivos não mudam frequentemente ea versão codificada pode ser armazenada em cache de alguma forma).