Este artigo se refere à seguintes Microsoft .NET Framework Class Library namespaces:
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 .
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
- 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:
- No menu arquivo , clique em novo e, em seguida, clique em Project .
- 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 .
- Na caixa de texto local , digite XMLDocService para alterar o nome padrão (o nome padrão é WebService1).
- Altere o nome do serviço da Web padrão é criado a partir do Service1.asmx para XMLDocService.asmx .
- 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.
- 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. - 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;
} - No menu Build , clique em Build Solution para criar o serviço da Web.
- 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.
- No Visual Studio. NET, clique em novo no menu arquivo e, em seguida, clique em Project .
- 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 .
- 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. - No menu Project , clique em Add Web Reference .
- 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.
- 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.
- Expanda a seção Referências da Web do Solution Explorer e observe o espaço para nome que foi usado.
- 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();
- Para chamar o método do objeto proxy, use o seguinte código:
XmlDocument myXmlDocumentObject = myXMLDocService.GetXmlDocument();
- No menu Build , clique em Build Solution para criar o aplicativo de console.
- Você receber a seguinte mensagem de erro compilação:
Não é possível converter implicitamente o tipo 'System.Xml.XmlDocument' para 'System.Xml.XmlNode'
- Substituir a chamada do método a seguir:
XmlNode myXMLNodeObject = myXMLDocService.GetXmlDocument();
- No menu Build , clique em Build Solution para criar o aplicativo de console. Você pode criar com êxito o aplicativo.
- 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));
- Fazer uma chamada para o método de serviço da Web que retorna o nome do autor:
string strFirstName = WebServiceObject.GetFirstName( XmlDocumentObject );
- Imprimir o nome do autor no console:
Console.WriteLine( "The first name of the author is: " +strFirstName );
- No menu Build , clique em Build Solution para criar o aplicativo de console.
- 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).
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