Artigo: 330600 - Última revisão: quinta-feira, 4 de Setembro de 2003 - Revisão: 6.4

COMO: Utilizar elementos XmlDocument quando transmitidos para ou devolvidas a partir do WebMethods utilizando o Visual C# .NET

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.

Nesta página

Expandir tudo | Reduzir tudo
Este artigo faz referência à seguinte Microsoft .NET Framework Class Library espaços de nomes:
  • System.XML

Sumário

Este artigo passo a passo descreve como escrever código aplicações .NET para executar métodos de serviço Web que ter um parâmetro XmlDocument ou que devolvem um objecto XmlDocument .

Introduction

Quando XmlDocument objectos são passados como parâmetros para métodos de serviço Web ou são devolvidos a partir de métodos de serviço Web, são empacotar as referências como objectos de XmlNode . Os tipos de XmlDocument e XmlNode são implementados no espaço de nomes System.XML ( XmlDocument é derivado de XmlNode ).

Se necessitar de manipulação de dados que está a empacotar referências como um XmlNode (que é transmitido para um método de serviço Web ou, é devolvido pelo método de serviço Web) que utilize a API XmlDocument que não está exposta pelo tipo XmlNode , tem de carregar os dados no objecto XmlDocument . Para o fazer, utilize um dos seguintes métodos:
  • XmlDocument.LoadXml(XmlNode.OuterXml)
  • XmlDocument.ImportNode(XmlNode, true)
Os exemplos neste artigo demonstram como utilizar estes métodos

Create a Web Method

  1. No Microsoft Visual Studio. NET, crie um novo Visual C# .NET ASP.NET Web Service projecto. Para o fazer, siga estes passos:
    1. No menu ficheiro , clique em Novo e, em seguida, clique em projecto .
    2. Na lista Tipos de projecto , clique em Visual C# Projects e, em seguida, clique em Serviço Web do ASP.NET no painel de modelos .
  2. Na caixa de texto localização , escreva XMLDocService para alterar o nome predefinido (o nome predefinido é WebService1).
  3. Altere o nome do serviço Web predefinido que é criado a partir do Service1.asmx para XMLDocService.asmx .
  4. Clique em clique aqui para mudar para vista de código no ambiente de estruturador para mudar para vista de código.
  5. Defina um método que devolve um objecto XMLDocument . Cada método irão expor o serviço tem ser sinalizado com um atributo ' WebMethod . Sem este atributo, o serviço não irão expor o método.

    Nota Nem todos os método tem de ter o atributo ' WebMethod . Este atributo pode ser utilizado para ocultar alguns detalhes de implementação que são chamados por métodos do serviço Web públicos ou se a classe WebService é utilizada nas aplicações locais. Embora uma aplicação local pode utilizar qualquer classe pública, apenas WebMethod métodos podem ser acessíveis remotamente como XML Web serviços.
  6. Adicione os seguintes métodos de serviço Web à classe XMLDocService que acabou de criar:
    [WebMethod]
    public XmlDocument GetXmlDocument()
    {
    // Create an XmlDocument object.
    XmlDocument xmlDocumentObject = new XmlDocument();
    XmlDocumentObject.LoadXml("<book genre=\"novel\" publicationdate=\"1997\" " +
    "      ISBN=\"1-861001-57-5\">" +
    "  <title>Pride And Prejudice</title>" +
    "  <author>" +
    "    <first-name>Jane</first-name>" +
    "    <last-name>Austen</last-name>" +
    "  </author>" +
    "  <price>24.95</price>" +
    "</book>"); 
    
    // Return the created XmlDocument object.
    return( XmlDocumentObject );
    }
    [WebMethod]
    public string GetFirstName( XmlNode XmlNodePassed )
    {
    // Create a new XmLDocument object.
    XmlDocument XmlDocumentObject = new XmlDocument();
    
    // Load the XmlNode into the XmlDocument object.
    XmlDocumentObject.LoadXml( XmlNodePassed.OuterXml );
    
    // Find the first name of the author.
    XmlNodeList XmlNodeListObj = XmlDocumentObject.GetElementsByTagName( "first-name" );
    
    // Return the first name.
    return XmlNodeListObj[ 0 ].ChildNodes[ 0 ].Value;
    }
  7. No menu criar , clique em criar soluções para criar o serviço Web.
  8. Abra a página de serviço XMLDocService.asmx XML Web para testar o serviço Web XML. Se definido no computador local para hospedar a página, o URL é http://localhost/XMLDocService/XMLDocService.asmx. O Microsoft ASP.NET runtime devolve a página de ajuda uma XML Web service, que descreve os XML Web service. Também pode utilizar esta página para testar os diferentes métodos de serviço Web XML.

Consume the Web Method

  1. No Visual Studio. NET, clique em Novo no menu ficheiro e, em seguida, clique em projecto .
  2. Na lista de Tipos de projecto , clique em Visual C# Projects e, em seguida, clique em Aplicação de consola no painel de modelos .
  3. Na nova aplicação, adicione uma referência ao serviço Web XMLDocService .

    Este passo cria uma classe de proxy no computador cliente. Depois de criada a classe proxy, é possível criar objectos baseiam-se a classe. Cada chamada de método efectuadas com o objecto é transferida para uniform resource identifier (URI) do serviço Web como um pedido SOAP.
    1. No menu projecto , clique em Adicionar referência Web .
    2. Na caixa de diálogo Adicionar referência Web , escreva o URL do serviço Web na caixa de texto endereço e, em seguida, prima ENTER. Se definir o computador local para hospedar o serviço Web, o URL é http://localhost/XMLDocService/XMLDocService.asmx.
    3. Clique em Adicionar referência . Em alternativa, pode escreva o URL do ficheiro de identificação (XMLDocService.vsdisco) ou clicar em Referências de Web num servidor Web Local no painel da esquerda para seleccionar o serviço XMLDocService a partir da lista.
    4. Expanda a secção Referências Web Solution Explorer e anote o espaço de nomes que foi utilizado.
  4. Crie uma instância do objecto proxy para o serviço da Web XMLDocService . Cole o seguinte código na função principal :
    localhost.XMLDocService myXMLDocService = new localhost.XmlDocService();
  5. Para invocar o método do objecto proxy, utilize o seguinte código:
    XmlDocument myXmlDocumentObject = myXMLDocService.GetXmlDocument();
  6. No menu criar , clique em criar soluções para criar a aplicação da consola.
  7. Receberá a seguinte mensagem de erro de compilação:
    Não é possível converter implicitamente o tipo System.XML.XmlDocument para 'System.Xml.XmlNode'
  8. Substituir a chamada do método com o seguinte:
    XmlNode myXMLNodeObject = myXMLDocService.GetXmlDocument();
  9. No menu criar , clique em criar soluções para criar a aplicação da consola. Pode criar com êxito a aplicação.
  10. Carregar os dados in a XmlNode devolvidos para um objecto XmlDocument utilizando o método ImportNode :
    XmlDocument myXmlDocumentObject = new XmlDocument();
    myXmlDocumentObject.AppendChild(myXmlDocumentObject.ImportNode(myXMLNodeObject,true));
  11. Efectuar uma chamada para o método de serviço Web que devolve o nome do autor:
    string strFirstName = WebServiceObject.GetFirstName( XmlDocumentObject );
  12. Imprimir o nome próprio do autor na consola:
    Console.WriteLine( "The first name of the author is: " +strFirstName );
  13. No menu criar , clique em criar soluções para criar a aplicação da consola.
  14. No menu Debug , clique em Executar para executar a aplicação da consola.

Resolução de problemas

Se atribuir o valor devolvido de um método de serviço Web que devolve um objecto XmlDocument para outro objecto XmlDocument na aplicação cliente, receberá a seguinte mensagem de excepção:
Não é possível converter implicitamente escreva System.Xml.XmlNode para 'System.Xml.XmlDocument'
O erro ocorre porque directores inferior não é permitida no Microsoft. NET. O devolvidos XmlDocument empacotar as referências como um XmlNode . Não pode atribuir um objecto de XmlNode a um objecto XmlDocument porque XmlDocument é herdada de XmlNode .

Do mesmo modo, para expor XmlDocument parâmetros, terá de definir os parâmetros como objectos de XmlNode . Se declarar os parâmetros como XmlDocument , receberá a seguinte mensagem de excepção:
A conversão especificada não é válida
A excepção ocorre porque o XmlDocument que é transmitido do cliente é empacotar as referências como um XmlNode e o código tenta atribuir um objecto de XmlNode a um objecto de parâmetro XmlDocument (directores inferior não é permitido no. NET).

Referências

Para obter informações adicionais sobre como criar serviços Web, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
308359  (http://support.microsoft.com/kb/308359/EN-US/ ) COMO: Escrever um serviço Web simples utilizando o Visual C# .NET

A informação contida neste artigo aplica-se a:
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft Web Services (included with the .NET Framework) 1.0
  • Microsoft Web Services Enhancements for Microsoft .NET 1.1
  • Microsoft .NET Framework 1.0
  • Microsoft .NET Framework 1.1
Palavras-chave: 
kbmt kbclient kbhowtomaster kbhowto KB330600 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 330600  (http://support.microsoft.com/kb/330600/en-us/ )