Soapui content transfer coding binary options


Mensagens SOAP com anexos Este documento define uma ligação para uma mensagem SOAP 1.1 a ser transportada dentro de uma mensagem MIME multipart relacionada, de tal forma que as regras de processamento para a mensagem SOAP 1.1 são preservadas. O mecanismo MIME multipart para encapsulamento de documentos compostos pode ser usado para agrupar entidades relacionadas à mensagem SOAP 1.1, como anexos. São especificadas regras para o uso de referências URI para se referir a entidades incluídas no pacote MIME. Os comentários são bem-vindos aos autores, mas você é encorajado a compartilhar suas visualizações na lista de discussão pública do W3Cs mailto: xml-dist-appw3.org (ver arquivos). Este documento é uma NOTA disponibilizada pelo W3C apenas para discussão. A publicação desta nota pelo W3C indica que não há endosso pelo W3C ou pela equipe do W3C, nem qualquer membro do W3C. O W3C não teve controle editorial sobre a preparação desta Nota. Este documento é um trabalho em andamento e pode ser atualizado, substituído ou tornado obsoleto por outros documentos a qualquer momento. Uma lista dos documentos técnicos atuais do W3C pode ser encontrada na página Technical Reports. 1. Introdução Uma mensagem SOAP pode precisar ser transmitida juntamente com anexos de vários tipos, que vão desde imagens de fac-símile de documentos legais até desenhos de engenharia. Esses dados geralmente estão em algum formato binário. Por exemplo, a maioria das imagens na Internet são transmitidas usando formatos de dados GIF ou JPEG. Neste documento, descrevemos uma maneira padrão de associar uma mensagem SOAP com um ou mais anexos no formato nativo em uma estrutura MIME multipart para transporte. A especificação combina o uso específico do tipo de mídia MIME Múltiplo relacionado (RFC 2387) e os esquemas URI discutidos em RFC 2111 e RFC2557 para referenciar peças MIME. Os métodos descritos aqui tratam a estrutura MIME multipart como essencialmente uma parte da ligação do protocolo de transferência, ou seja, em par com os cabeçalhos do protocolo de transferência, tanto quanto a mensagem SOAP. A estrutura de várias partes, embora tenha dado um nome (pacote de mensagens SOAP) não é uma entidade que pode ser inequivocamente identificada como tal porque não existe um token explicitamente expressando a intenção de tornar essa entidade. Uma escolha consciente neste documento foi evitar a adição de um novo tipo de entidade com base em um token reconhecível. O objetivo deste documento é mostrar como usar instalações existentes no SOAP e mecanismos MIME padrão para transportar e referenciar anexos. Em outras palavras, tomamos uma abordagem minimalista para mostrar o que já é possível com os padrões existentes, sem inventar nada. Uma semântica mais rigorosa para pacotes de mensagens requer um novo tipo de entidade. Esse tipo pode ser construído estendendo a abordagem descrita aqui com uma nova entrada de cabeçalho SOAP que, por exemplo, pode ser usada para fornecer um manifesto do conteúdo completo do pacote de mensagens. A maioria dos protocolos de comunicação da Internet são capazes de transportar conteúdo codificado MIME, embora algumas considerações especiais sejam necessárias para o HTTP conforme descrito na seção HTTP binding. 2. Pacotes de mensagens SOAP Um pacote de mensagens SOAP contém uma mensagem SOAP 1.1 primária. Também pode conter entidades adicionais que não estão léxicamente dentro da mensagem SOAP, mas estão relacionadas de alguma forma. Essas entidades podem conter dados em formatos diferentes de XML. A mensagem primária SOAP 1.1 em um pacote de mensagens pode fazer referência às entidades adicionais. Essas entidades adicionais geralmente são comunicadas informalmente como anexos. Esta seção descreve como construir pacotes de mensagens SOAP e como os processadores SOAP os processarão. Um pacote de mensagens SOAP é construído usando o tipo de mídia Relacionado com Multipart, que é definido no RFC 2387. As regras para a construção de pacotes de mensagens SOAP são as seguintes: A mensagem primária SOAP 1.1 deve ser carregada na parte do corpo raiz do Multipart Related estrutura. Consequentemente, o parâmetro de tipo do cabeçalho de mídia relacionado com Multipart sempre igualará o cabeçalho Content-Type para a mensagem SOAP 1.1 primária, ou seja, texto xml. As peças MIME referenciadas devem conter um cabeçalho MIME de ID de conteúdo estruturado de acordo com o RFC 2045. ou um cabeçalho MIME de Conteúdo-Localização estruturado de acordo com RFC 2557. É altamente recomendável que a parte raiz contenha um cabeçalho MIME de ID de conteúdo estruturado em De acordo com o RFC 2045. e que, além dos parâmetros necessários para o tipo de mídia Multipart Related, o parâmetro de início (opcional no RFC 2387) está sempre presente. Isso permite uma detecção de erros mais robusta. Um processador SOAP compatível com esta especificação que recebe uma mensagem SOAP 1.1 carregada na parte do corpo raiz de uma mensagem MIME relacionada com várias partes deve processar a mensagem SOAP de acordo com as regras para o processamento de mensagens SOAP 1.1 conforme definido pelo SOAP 1.1. Em particular, um processador SOAP que recebe uma mensagem inválida deve gerar um código de falha do Cliente conforme descrito no SOAP 1.1, seção 4.4.1. O encapsulamento MIME Multipart de uma mensagem SOAP é semanticamente equivalente a uma ligação de protocolo SOAP na medida em que a própria mensagem SOAP não está ciente de que está sendo encapsulada. Ou seja, não há nada na mensagem SOAP primária propriamente dita que indique que a mensagem SOAP está encapsulada (consulte a seção 5). O exemplo a seguir mostra uma mensagem SOAP 1.1 com uma imagem de facsímile anexada do formulário de reivindicação assinado (claim061400a. tiff): (Nesses exemplos, a linha de cabeçalho Content-Type foi continuada em duas linhas para que o exemplo se imprima facilmente. Os remetentes de mensagens SOAP devem Enviar cabeçalhos em uma única linha longa.) 3. Referências SOAP para anexos Tanto as entradas de cabeçalho como o corpo da mensagem primária SOAP 1.1 podem precisar se referir a outras entidades no pacote de mensagens. Nesta seção, especificamos um método para realizar isso usando mecanismos existentes em SOAP e MIME. As regras de codificação de dados fornecidas na seção 5 de SOAP 1.1 permitem que o valor de um acessador seja dado por referência, ou seja, como um recurso referenciado por um URI dado como O valor de um atributo href. Observamos que o esquema de codificação SOAP permite que o valor de um atributo href seja qualquer referência URI, e o atributo pode, portanto, ser usado para referenciar não apenas fragmentos XML dentro de uma mensagem SOAP 1.1, mas qualquer recurso. Esta especificação descreve um padrão de uso do atributo href SOAP no SOAP 1.1 para permitir que os valores dos atributos sejam referências aos anexos transportados como partes MIME no pacote de mensagens SOAP. O processo de resolução de referências URI (incluindo referências usadas em atributos href) na mensagem SOAP 1.1 primária em um pacote de mensagens SOAP é baseado nas regras especificadas no RFC2557 para mensagens MIME multipart com documentos raiz html de texto. Adaptamos estas regras do contexto HTML e de renderização e aplicamos-as ao contexto de mensagens SOAP 1.1. Além disso, baseamos a sintaxe URI relativa e as regras de absolutização em RFC2396 em vez do RFC1808 agora obsoleto usado no RFC2557. O processo de resolução opera em duas etapas: primeiro converta todas as referências URI para referências absolutas e, em seguida, resolva as referências absolutas. Nós fornecemos regras para ambas as etapas aqui. Observe que esse processo não se aplica às referências do mesmo documento, conforme definido na seção 4.2 do RFC 2396. A semântica do padrão SOAP 1.1 que envolve o uso de um atributo href com um identificador de fragmento para fazer referência a um elemento XML na mesma mensagem SOAP 1.1 baseada Num rótulo definido por um atributo ID permanece inalterado. O processo autoritário para converter referências URI relativas a referências absolutas é definido na RFC 2396. O aspecto desse processo que precisamos especificar relaciona-se com o estabelecimento do URI básico. O RFC 2396 especifica um esqueleto de processo para estabelecer um URI básico, com base nas seguintes opções, listadas em ordem de precedência. Ao lado de cada opção, descrevemos sua aplicação no contexto do formato do pacote de mensagens SOAP descrito na última seção. URI básico no Conteúdo do documento: o mecanismo para a especificação explícita de um URI básico dentro de uma mensagem SOAP 1.1 será o mecanismo de base XML. URI Base de uma Entidade Encapsulante: Se houver um cabeçalho Content-Location contendo um URI absoluto em qualquer entidade MIME que inclua a mensagem SOAP 1.1 primária, o URI do cabeçalho Content-Location mais próximo é o URI básico para a entidade. URI Base do URI de Recuperação: o URI de recuperação para um pacote de mensagens SOAP nunca pode ser usado como um URI básico. URI base padrão: o URI base padrão será thismessage: de acordo com o RFC 2557. Cada parte MIME na estrutura Multipart Related que constitui um pacote de mensagens SOAP tem pelo menos um rótulo URI absoluto. Existem três casos. Se um cabeçalho Content-Location estiver presente com um valor URI absoluto, esse URI é um rótulo para a peça. Se um cabeçalho Content-Location estiver presente com um valor URI relativo, as regras 2 e 4 acima são aplicadas para estabelecer a URI básica para o processo de conversão da URI relativa a uma absoluta. O URI absoluto resultante é um rótulo para a parte. Se um cabeçalho Content-ID estiver presente, uma etiqueta URI absoluta para a peça é formada usando o esquema URI CID conforme descrito na RFC 2111. A resolução de referências URI absolutas funciona da seguinte forma. Para cada URI de referência na mensagem SOAP 1.1 primária, compare o valor do URI de referência, após a conversão para a forma absoluta conforme descrito acima, com os rótulos URI derivados dos cabeçalhos Content-ID e Content-Location para outras partes do corpo no Multipart ao redor Estrutura relacionada. As regras para comparação URI são dadas em RFC2396. Se uma correspondência for encontrada, a entidade contida na parte MIME é o referente. Se nenhuma correspondência for encontrada, use regras de resolução normais com base no esquema URI. No caso de etiquetas conflitantes baseadas em cabeçalhos Content-ID e Content-Location, use as regras na seção 8.3 do RFC2557 para resolver o conflito. O exemplo na seção 2 ilustra o uso da referência CID no corpo da mensagem SOAP 1.1. Claramente, o exemplo poderia ter usado uma referência para um recurso remoto. Aqui está o exemplo da seção 2 acima, reescrito usando entidades de referência de URIs absolutas rotuladas usando cabeçalhos de Conteúdo-Local: Aqui está o mesmo exemplo, desta vez usando URIs relativas que usam o cabeçalho Content-Location na base da estrutura MIME Multipart Related para Seu URI básico: Finalmente, aqui é um exemplo que usa URIs relativos, mas não URI de base explícita, de modo que a regra 4 da seção 3 para o estabelecimento do URI básico se aplica, causando URIs relativas na mensagem SOAP e etiquetas Content-Location para usar o URI básico Do thismessage:: Note que dentro de uma mensagem SOAP, o fato de que uma referência URI ocorre como o valor de um atributo hff SOAP não implica por si só que o processador SOAP recebendo deve resolver o URI. Depende do processador SOAP determinar se a resolução do URI é necessária, com base na semântica de processamento da mensagem. O processador SOAP de recepção pode optar por ignorar o URI, mesmo que esteja fazendo referência a um anexo MIME. Por outro lado, todos os anexos que aparecem no pacote de mensagens SOAP podem não ser referenciados na mensagem SOAP raiz. Está fora do escopo desta especificação para fornecer um meio para dentro de uma mensagem SOAP para marcá-lo explicitamente como a raiz de um pacote de mensagens SOAP, por exemplo, com uma entrada de cabeçalho distinta que enumera o conteúdo do pacote de mensagens. Uma especificação separada pode descrever esse mecanismo e definir a semântica de integridade da mensagem com base nela. 4.Relação ao SOAP 1.1 Esta especificação define uma extensão para os mecanismos de ligação de transporte definidos no SOAP 1.1. A embalagem de uma mensagem SOAP 1.1 na parte raiz de uma estrutura MIME Múltipla relacionada, juntamente com outros conteúdos, deve ser vista como um método específico para transportar mensagens SOAP 1.1 em qualquer protocolo capaz de transferir conteúdo codificado em MIME. Um processador SOAP que é capaz de suportar a codificação baseada em MIME aqui descrita e o transporte base sobre o qual é carregado deve tratar a mensagem SOAP 1.1 na parte raiz como a mensagem a ser processada, seguindo todas as regras do SOAP 1.1 para a mensagem SOAP 1.1 e para a ligação de transporte de base utilizada. Um exemplo do último é a ligação HTTP descrita na seção 6 do SOAP 1.1. Na próxima seção, completamos a especificação de pacotes de mensagens descrevendo as regras para transportar uma mensagem SOAP composta em uma mensagem HTTP. 5. Encadernação HTTP Como no caso da especificação base SOAP 1.1, esta especificação não prescreve nem uma mensagem assíncrona ou um padrão de interação de resposta de solicitação síncrona. Nossa descrição da ligação HTTP, portanto, descreve a relação entre os cabeçalhos HTTP e os cabeçalhos MIME usados ​​na construção de um pacote de mensagens SOAP, sem restringir o padrão de interação de qualquer maneira. A abordagem básica para transportar a estrutura MIME multipart em uma mensagem HTTP nesta especificação é limitar o conteúdo codificado MIME às partes MIME e usar o cabeçalho do tipo de mídia multipart no nível HTTP como um cabeçalho HTTP nativo. As regras para formar uma mensagem HTTP contendo um pacote de mensagens SOAP são as seguintes: O cabeçalho MIME relacionado ao Conteúdo-Tipo: Multipartito deve aparecer como um cabeçalho HTTP. As regras para os parâmetros desse cabeçalho especificado na seção 2 também se aplicam aqui. Nenhum outro cabeçalho com semântica definido pelas especificações MIME (como Content-Transfer-Encoding) pode aparecer como cabeçalho HTTP. Especificamente, o cabeçalho MIME-Version: 1.0 não deve aparecer como um cabeçalho HTTP. Observe que o próprio HTTP usa muitos cabeçalhos tipo MIME com semântica definida pelo HTTP 1.1. Estes podem, naturalmente, aparecer livremente. As peças MIME contendo a mensagem SOAP e os anexos constituem o corpo da entidade HTTP e devem aparecer conforme descrito na seção 2, incluindo cabeçalhos MIME apropriados. Vale ressaltar que, ao contrário do HTTP, as semânticas MIME aplicam-se ao nível da mensagem SMTP e, portanto, para o transporte SMTP , Os cabeçalhos MIME múltiplos podem simplesmente se fundir com os cabeçalhos SMTP. O exemplo a seguir mostra uma mensagem HTTP contendo um pacote de mensagens SOAP, incluindo dois anexos que constituem uma reivindicação de seguro automóvel. A mensagem SOAP 1.1 contém os dados de reivindicação e é transmitida juntamente com uma imagem de fax do formulário de reivindicação assinado (claim. tiff) e uma foto digital do carro danificado (car. jpeg). (Como nos exemplos anteriores, a linha de cabeçalho Content-Type foi continuada em duas linhas para que o exemplo se imprima facilmente. Os remetentes de mensagens SOAP devem enviar cabeçalhos em uma única linha longa.) 5. Referências 6. Reconhecimentos Os autores agradecem as sugestões de Andrew Layman e Jim Stearn. Estou com uma vantagem sobre como adicionar um anexo no meu pedido SOAP. Temos que consumir um serviço web de terceiros, construído em java, que é a coisa mais complicada que já encontrei. Todos os outros serviços da Web que usamos, que exigem anexos, possuem um método ou propriedade para adicionar o anexo. Simples. No entanto, este não fornece esse método. Nós temos uma versão da mensagem SOAP juntos que é exatamente como queremos o XML, no entanto, é a parte MIME do arquivo que não podemos adicionar. Esta é a parte XML que podemos gerar e enviar, no entanto, é incorreto, pois precisamos de uma parte do MIME lá, como: Eu explorei a internet para obter respostas, mas apareciam em branco. Não parece haver muita documentação ao usar o WSE para isso. Devo salientar que o WSE é um requisito do lado do servidor, e não há nenhuma maneira de mudar a tecnologia para resolver esse problema. Há uma maneira que essas seções MIME podem ser adicionadas. EDIT: devo acrescentar que posso obter um documento XML de trabalho enviado através do SoapUI com anexos, mas não consigo encontrar uma maneira dentro do nosso código. Eu adicionei uma recompensa para tentar obter uma solução para esse problema. Se alguém tiver outras ideias, informe-me. EDITE novamente: eu sei que foi uma semana desde que eu consegui verificar as respostas aqui, mas enquanto alguns dão uma boa idéia para onde eu ainda estou desenhando um espaço em branco. A terrível documentação em torno de XopDocument e seus métodos é um grande ponto de fadiga, se alguém tiver algum exemplo de usar o SaveToXopPackage, eles poderiam fornecer porque isso está começando a ser grato, pediu 20 de dezembro 11 às 11:48 Bem, John, como chegar a uma solução Ao invés de dar uma volta fingindo que você sabe tudo. Neste cenário, para mim, é necessário WSE. Sem ele, nossos pedidos serão rejeitados. Eu não posso dizer ao fornecedor de terceiros como eles devem estar codificando, eu posso tentar, mas eles sempre foram a empresa menos útil do mundo para contornar. Então, enquanto a WSE não deve ser usada se você estiver criando seu próprio software, é um requisito nesta instância. Ndash anothershrubery 5 de janeiro 12 às 10:49 Tenho pouco a dizer sobre isso, exceto que espero que alguém tenha dito ao imperador que suas roupas são obsoletas. Além disso, se você pretende que o uso do WSE não é uma opção, então você nunca aprenderá a personalizar o WCF para fazer o que você precisa, apenas usando o software suportado. Ndash John Saunders 5 de janeiro 12 às 17:53 Eu acho que você pode ter algumas opções: 1) Use o MTOM. Isso parece encerrar automaticamente a mensagem de saída em blocos MIME. 2) A Microsoft realmente fornece suporte para gerar e ler XOP com mime através da classe XopDocument, da qual é o SoapEnvelope. No entanto, penso que esta abordagem pode exigir que você realize o envio da mensagem através de um HttpWebRequest. Este blog tem um exemplo de como implementar isso. A desvantagem é que isso requer muito código e configuração extra para funcionar corretamente. A solução ideal seria interceptar o código que executa a transmissão do envelope, mas não consegui localizar o local correto para isso na tubulação. Estou confiável Estou trabalhando exatamente no mesmo projeto que vocês. Esse pedido de sabão é um pouco familiar :-) Nós conseguimos a maior parte do caminho, mudando para WCF e basicamente codificando manualmente o objeto de solicitação (criando classes que combinam o formato de sabão e, em seguida, usando os atributos xmlelement para decorá-lo para que ele Parece o pedido de sabão. O arquivo em si é declarado como Byte () na classe Attachment e também decorado com o xmlelement). É o que o contrato do WCF e parte do modelo de dados se parece. O modelo de dados real tem um monte de classes extras (Área de Aplicação, Área de Dados, Trabalho, etc.), mas isso lhe dá o suficiente de como é estruturado. A peça importante é o Arquivo como Byte (). Aqui está no Vb. net. Em seguida, você obteve seu cliente do WCF, isso é praticamente o mesmo que todos os clientes do WCF. Finalmente, você obteve o app. config. Heres a magia porque estava dizendo ao WCF usar Mtom para enviar a mensagem. Isso levará o Byte () e o separará em uma seção MIME separada, substituindo-o por um XOP: Incluir. Tenho em atenção que, por enquanto, estou apenas enviando-o através do localhost para que eu possa ver o pedido usando o tcpTrace. Você pode google esse aplicativo, mas ele basicamente captura o pedido para que possamos ver como ele se parece. Eu configurei tcpTrace para ouvir na porta 84. Finalmente, heres a chamada real para o cliente WCF para fazer a solicitação. E heres o traço que obtivemos através do tcpTrace. Ele obteve a estrutura básica correta e conseguiu extrair os dados binários do xml e colocá-lo em uma seção MIME separada. Como mencionei anteriormente - ainda temos problemas. Existem algumas tags faltando no cabeçalho de sabão. Mas eu acho bem ser capaz de descobrir isso. O problema real é que o Content-ID NÃO ESTÁ em um formato que o nosso parceiro pode aceitar - eles esperam algo como lt1.a33c2d7e84634122705ebc71e53d95d4c2683d726ba54e14apache. org e. net está formatando-os como tempuri. org 1 634618782531246992. Isso está causando o manipulador do serviço da Web para travar Porque não sabe como ler os IDs de conteúdo escapados dentro da mensagem de sabão. Respondeu 7 de janeiro 12 às 0:23 Apenas notei sua edição para isso agora. Sim, parece o mesmo projeto. Infelizmente, sua solução não vai funcionar no nosso caso, pois estamos restritos ao uso do WSE e não do WCF. Confiança em VS 2005. É uma dor. Mas este é o resultado que eu procuro, mas preciso descobrir a solução na WSE. (No entanto, com o seu problema, você não pode configurar o Content-ID para qualquer coisa que quiser. Isso funciona dentro do SoapUI, quando você especifica o ID do conteúdo você mesmo e não confia na representação padrão. Meu endereço de e-mail, não funciona um, está no meu Se você quiser conversar ainda mais. Ndash anothershrubery 16 de janeiro 12 às 12:58 Como você diz que conseguiu trabalhar no SoapUI, eu pensaria que você pode simplesmente perguntar ao SoapUI para o XML gerado que enviou para que você saiba como deveria se parecer, então Modifique seu código para imitar isso. UPDATE: após o seu comentário e lendo as outras respostas com mais detalhes: a solução me parece enviar bytes diretamente, usando o HttpWebRequest como na resposta do ktsioliss. Em detalhes: Crie seu SOAP XML (o exemplo que você deu ), Codifique isto para bytes em UTF8 (1) Crie uma seqüência de caracteres com o mimeboundary inicial (a parte em seu XML anterior), codifique para bytes em UTF8 (2) Crie os bytes para o segundo mimeboundary (a parte após o XML). Então, crie a string contendo --MIMEBOUNDARY etc. codifique para UTF8 bytes e anexar todos os bytes do seu arquivo test. gif (3) Anexar todos os bytes na ordem (2), (1) e (3) e enviá-lo através do fio. Não deveria fazer o truque Ok, então eu entendi que aceita os dados do arquivo no elemento ltgwm: Filegt. Isso é sem usar o XOP, então a solicitação agora se parece: quando passou para o SoapUI, isso funciona perfeitamente, no entanto, no código ele dá uma resposta, mas ele lança um erro dizendo que a resposta não é um XML bem formado. Com uma exceção interna do WSE1608: Nenhuma parte XOP estava localizada no fluxo para o índice de conteúdo especificado: ltrootpart36875c60-630c-4e23-9e74-f9a9c7547fc7example. jaxws. sungt Vou abrir uma nova pergunta a respeito, pois é tecnicamente diferente questão. Eu estou envolvido exatamente no mesmo projeto e eu tenho os mesmos problemas discutidos neste tópico Estou usando os aprimoramentos vb 2005 e WSE 3.0 e eu consegui funcionar mesmo que seja uma dor por enquanto. Ao escrever o conteúdo do arquivo diretamente na propriedade do arquivo, o anexo será aceito pelo parceiro. No meu caso, isso funciona para quase todas as transações, exceto PRAs. Aqui, a resposta é positiva e um AttachmentID será entregue, mas o anexo não aparece na transação. Aqui está um exemplo da seção Anexos: Se eu definir RequerMomo para o Serviço como True, eu recebo o seguinte erro: Das Prfix kann nicht von in starstandards. org webservices 2005 10 transporte innerhalb desselben Startelementtags neu definiert werden. Por um lado, funciona, por outro lado, não tenho certeza se será enviado com elementos XOP. Respondeu em 17 de janeiro 12 às 12:46 Eu fiz uma discussão com os desenvolvedores de serviços web sobre colocar os dados diretamente no elemento ltFilegt e eles disseram que isso não está de acordo com suas especificações e eles exigem um elemento ltxop: Includegt. Veja o stackoverflow question 8805095 hellip para uma descrição mais detalhada do problema que estamos tendo. Se quiser discutir mais fora daqui, veja meu perfil para o meu endereço de e-mail. Ndash anothershrubery 17 de janeiro às 12:59 Claro. Mas não consigo encontrar seu endereço de e-mail. Ndash Daniel Schlieckmann 17 jan 12 às 15:43 Se você não pode vê-lo sob a biografia, agora está na seção Sobre mim no meu perfil. Ndash anothershrubery 17 de janeiro 12 às 15:45 Obrigado. Já enviei um e-mail. Ndash Daniel Schlieckmann 18 jan 12 às 15:24 Sua resposta 2016 Stack Exchange, Inc

Комментарии

Популярные сообщения из этого блога

São opções de estoque salários suplementares

Previsão japonesa iene forex

Sydney forex exchange pakistan