A publicação de mensagens de diversos schemas para o Biztalk, envolve um conjunto de questões.

Normalmente segue-se a abordagem de criar Web Services com os Schemas das mensagens usando o “Web Service Publishing Wizard”. Essa abordagem deve ser logo posta de parte, pois devido a um elevado número de tipos de mensagens, faz com que a criação de um Webservice por tipo de schema se torne impraticável.  

Assim colocam-se dois problemas:

  1. Como criar um webservice genérico para publicar qualquer tipo de mensagem.
  2. Como fazer o “cast” da mensagem genérica para o tipo de mensagem propriamente dita, para poder ser consumida pelo subscritor respectivo.

 Para criar um Web Service genérico, para qualquer tipo de mensagem:

  1. Executar o “Web Service Publishing Wizard”
  2. Seleccionar “Publish Schema as A Web Service”
  3. Remover “WebService1”
  4. Com o botão direito do rato, seleccionar “Add Web Service”
  5. Com o botão direito do rato, seleccionar WebService1 e seleccionar “web method, One-Way”
  6. Com o botão direito do rato, seleccionar o parametro “Request” e “Schema Type”
  7. Seleccionar qualquer dll com um schema (pode ser qualquer schema)
  8. Seleccionar “Next”
  9. Seleccionar “Create Biztalk Receive Locations”
  10. Seleccionar “Next”
  11. Seleccionar “Create”
  12. O Web Service é criado

O Wizard cria um Webservice para o Schema especificado, no próximo passo, irá alterar-se o mesmo para receber um tipo de mensagem genérico.

Editar o Web Service

  1. Abrir o Web Service criado
  2. Editar a assinatura do mesmo para parecer da seguinte forma: public void WebMethod1(System.Xml.XmlDocument part)
  3. Procurar pela linha que tem a criação da variável inParamInfos e alterar o typeof para System.Xml.XmlDocument.
    Nota: Caso se tenha alterado o nome do parâmetro de entrada, também terá de se alterar o nome do mesmo após a instrução typeof
  4. Alterar a variável bodyTypeAssemblyQualifiedName para string.empty
  5. Apagar os ficheiros DataTypes.cs e WsdlExtension.cs
  6. Compilar, invocar com um xml exemplo e verificar se a mensagem entra na MessageBox

Principal fonte http://geekswithblogs.com/sthomas/

Após o primeiro problema resolvido, resta-nos criar um processo de fazer "cast" das mensagens publicadas para um tipo conhecido, para facilitar o processo de subscrição.

A ideia partiu do meu colega João Martins (Jota), para tal só terá de se criar uma pipeline de receive, colocar na mesma uma Componente “Xml disassembler” e nas propriedades da mesma em “Document Schemas” colocar todos os Schemas de todos os tipos de mensagens que irão ser publicadas por este Web Service.

Nota: para evitar a publicação de tipos de mensagens não desejados, poderá também colocar-se a propriedade “Allow unrecognized message” a “false”.

Após a configuração e deploy da pipeline, só terá de se colocar o receive location do WebService a usar esta pipeline.

Após a implementação anterior, temos um Webservice que suporta a publicação de N tipos de mensagens.

LEAVE A REPLY

Please enter your comment!
Please enter your name here