ID do artigo: 330600 - Última revisão: quinta-feira, 4 de setembro de 2003 - Revisão: 6.4

COMO: Utilizar XmlDocument elementos quando passada para ou retornado da WebMethods usando o Visual translation from VPE for Csharp .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 | Recolher tudo
Este artigo se refere à seguintes Microsoft .NET Framework Class Library namespaces:
  • System.XML

Sumário

Este artigo passo a passo descreve como escrever código em aplicativos .NET para executar métodos de serviço da Web que se um parâmetro XmlDocument ou que retornam um objeto XmlDocument .

Introduction

Quando objetos XmlDocument são passados como parâmetros para métodos de serviço da Web, ou são retornados de métodos de serviço da Web, eles são empacotados como objetos XmlNode . Os tipos de XmlNode e XmlDocument são implementados no namespace System.XML ( XmlDocument é derivado de XmlNode ).

Se precisar de manipulação de dados que são empacotados como um XmlNode (que é passado para um método de serviço da Web, ou retornadas por um método de serviço da Web) que você use a API XmlDocument que não é exposta pelo tipo XmlNode , você deve carregar os dados em um objeto XmlDocument . Para fazer isso, use um dos seguintes métodos:
  • XmlDocument.LoadXml(XmlNode.OuterXml)
  • XmlDocument.ImportNode(XmlNode, true)
Os exemplos neste artigo demonstram como usar esses métodos

Create a Web Method

  1. No Microsoft Visual Studio. NET, crie um novo translation from VPE for Csharp Visual.NET ASP.NET Web Service projeto. Para fazer isso, execute as seguintes etapas:
    1. No menu arquivo , clique em novo e, em seguida, clique em Project .
    2. Na lista Tipos de projeto , clique em projetos translation from VPE for Csharp Visual e, em seguida, clique em ASP.NET Web Service no painel de modelos .
  2. Na caixa de texto local , digite XMLDocService para alterar o nome padrão (o nome padrão é WebService1).
  3. Altere o nome do serviço da Web padrão é criado a partir do Service1.asmx para XMLDocService.asmx .
  4. Clique em Clique aqui para alternar para modo de exibição de código no ambiente de designer para alternar para o modo código.
  5. Definir um método que retorna um objeto XMLDocument . Cada método que irá expor o serviço deve ser sinalizado com um atributo WebMethod . Sem esse atributo, o serviço não irá expor o método.

    Observação Nem todo método deve ter o atributo WebMethod . Esse atributo pode ser usado para ocultar alguns detalhes de implementação são chamados de métodos de serviço da Web públicos ou se a classe WebService é usada em aplicativos locais. Embora um aplicativo local possa usar qualquer classe pública, somente WebMethod métodos podem ser acessíveis remotamente como XML Web serviços.
  6. Adicione os seguintes métodos de serviço da Web à classe XMLDocService que você 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 Build , clique em Build Solution para criar o serviço da Web.
  8. Abra a página de serviço XMLDocService.asmx XML Web para testar o serviço XML da Web. Se você definir o computador local para hospedar a página, a URL é http://localhost/XMLDocService/XMLDocService.asmx. O Microsoft ASP.NET runtime retorna uma página do serviço XML Web que descreve o XML Web service. Você também pode usar esta página para testar diferentes métodos de serviço XML da Web.

Consume the Web Method

  1. No Visual Studio. NET, clique em novo no menu arquivo e, em seguida, clique em Project .
  2. Na lista Tipos de projeto , clique em projetos translation from VPE for Csharp Visual e, em seguida, clique em Console Application no painel de modelos .
  3. No novo aplicativo, adicione uma referência ao serviço da Web XMLDocService .

    Esta etapa cria uma classe proxy no computador cliente. Depois que a classe proxy é criada, você pode criar objetos que sejam baseiam a classe. Cada chamada de método é feita com o objeto é passada para o identificador de recursos uniforme (URI) do serviço da Web como uma solicitação SOAP.
    1. No menu Project , clique em Add Web Reference .
    2. Na caixa de diálogo Add Web Reference , digite a URL do serviço da Web na caixa de texto endereço e, em seguida, pressione ENTER. Se você definir o computador local para hospedar o serviço da Web, a URL é http://localhost/XMLDocService/XMLDocService.asmx.
    3. Clique em Adicionar referência . Como alternativa, pode ser digite a URL do arquivo de descoberta (XMLDocService.vsdisco) ou clique em Referências da Web no servidor Web Local no painel à esquerda para selecionar o serviço XMLDocService da lista.
    4. Expanda a seção Referências da Web do Solution Explorer e observe o espaço para nome que foi usado.
  4. Crie uma instância do objeto proxy do serviço da Web XMLDocService . Cole o seguinte código na função principal :
    localhost.XMLDocService myXMLDocService = new localhost.XmlDocService();
  5. Para chamar o método do objeto proxy, use o seguinte código:
    XmlDocument myXmlDocumentObject = myXMLDocService.GetXmlDocument();
  6. No menu Build , clique em Build Solution para criar o aplicativo de console.
  7. Você receber a seguinte mensagem de erro compilação:
    Não é possível converter implicitamente o tipo 'System.Xml.XmlDocument' para 'System.Xml.XmlNode'
  8. Substituir a chamada do método a seguir:
    XmlNode myXMLNodeObject = myXMLDocService.GetXmlDocument();
  9. No menu Build , clique em Build Solution para criar o aplicativo de console. Você pode criar com êxito o aplicativo.
  10. Carregar os dados no retornado XmlNode em um objeto XmlDocument usando seu método ImportNode :
    XmlDocument myXmlDocumentObject = new XmlDocument();
    myXmlDocumentObject.AppendChild(myXmlDocumentObject.ImportNode(myXMLNodeObject,true));
  11. Fazer uma chamada para o método de serviço da Web que retorna o nome do autor:
    string strFirstName = WebServiceObject.GetFirstName( XmlDocumentObject );
  12. Imprimir o nome do autor no console:
    Console.WriteLine( "The first name of the author is: " +strFirstName );
  13. No menu Build , clique em Build Solution para criar o aplicativo de console.
  14. No menu Debug , clique em Executar para executar o aplicativo de console.

Solucionar problemas

Se você atribuir o valor de retorno de um método de serviço da Web que retorna um objeto XmlDocument para outro objeto XmlDocument no aplicativo cliente, você receber a seguinte mensagem de erro exceção:
Não é possível converter implicitamente digite 'System.Xml.XmlNode' para 'System.Xml.XmlDocument'
O erro ocorre porque elenco para baixo não é permitido no Microsoft. NET. O XmlDocument retornado é empacotado como um XmlNode . Não é possível atribuir um objeto XmlNode para um objeto XmlDocument porque o XmlDocument é herdada de XmlNode .

Da mesma forma, para expor XmlDocument parâmetros, você deve definir os parâmetros como objetos XmlNode . Se você declarar os parâmetros como XmlDocument , você receber a seguinte mensagem de erro exceção:
Conversão especificada não é válida
A exceção ocorre porque o XmlDocument , que é passado do cliente é empacotado como um XmlNode e o código tenta atribuir um objeto XmlNode para um objeto de parâmetro XmlDocument (down elenco não é permitido no. NET).

Referências

Para obter informações adicionais sobre como criar serviços da Web, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
308359  (http://support.microsoft.com/kb/308359/EN-US/ ) COMO: Gravar um serviço da Web simples usando o Visual translation from VPE for Csharp .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 para 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 traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes 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/ )