Este artigo faz referência à seguinte Microsoft .NET Framework Class Library espaços de nomes:
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 .
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
- No Microsoft Visual Studio. NET, crie um novo Visual C# .NET ASP.NET Web Service projecto. Para o fazer, siga estes passos:
- No menu ficheiro , clique em Novo e, em seguida, clique em projecto .
- 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 .
- Na caixa de texto localização , escreva XMLDocService para alterar o nome predefinido (o nome predefinido é WebService1).
- Altere o nome do serviço Web predefinido que é criado a partir do Service1.asmx para XMLDocService.asmx .
- Clique em clique aqui para mudar para vista de código no ambiente de estruturador para mudar para vista de código.
- 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. - 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;
} - No menu criar , clique em criar soluções para criar o serviço Web.
- 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.
- No Visual Studio. NET, clique em Novo no menu ficheiro e, em seguida, clique em projecto .
- Na lista de Tipos de projecto , clique em Visual C# Projects e, em seguida, clique em Aplicação de consola no painel de modelos .
- 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. - No menu projecto , clique em Adicionar referência Web .
- 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.
- 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.
- Expanda a secção Referências Web Solution Explorer e anote o espaço de nomes que foi utilizado.
- 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();
- Para invocar o método do objecto proxy, utilize o seguinte código:
XmlDocument myXmlDocumentObject = myXMLDocService.GetXmlDocument();
- No menu criar , clique em criar soluções para criar a aplicação da consola.
- Receberá a seguinte mensagem de erro de compilação:
Não é possível converter implicitamente o tipo System.XML.XmlDocument para 'System.Xml.XmlNode'
- Substituir a chamada do método com o seguinte:
XmlNode myXMLNodeObject = myXMLDocService.GetXmlDocument();
- No menu criar , clique em criar soluções para criar a aplicação da consola. Pode criar com êxito a aplicação.
- 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));
- Efectuar uma chamada para o método de serviço Web que devolve o nome do autor:
string strFirstName = WebServiceObject.GetFirstName( XmlDocumentObject );
- Imprimir o nome próprio do autor na consola:
Console.WriteLine( "The first name of the author is: " +strFirstName );
- No menu criar , clique em criar soluções para criar a aplicação da consola.
- 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).
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