Como usar o comando PROPFIND no WebDAV para localizar um valor de propriedade em um item de pasta pública

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: 289867
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Sumário
Este artigo descreve o uso do Web Distributed Authoring e Versioning (WebDAV) PROPFIND comando para localizar o valor de uma propriedade em um item em uma pasta pública.
Mais Informações
O exemplo de código Microsoft Visual C++ a seguir usa o objeto HTTPRequest para enviar uma solicitação PROPFIND para o servidor Exchange para a propriedade DisplayName do item de email. Em seguida, o código obtém o valor da propriedade no texto de resposta da solicitação. Este exemplo de código requer MSXML.dll 2.0 ou uma versão posterior do MSXML.dll.

Para executar esse exemplo, execute essas etapas:
  1. Em pastas públicas, crie uma nova pasta e, em seguida, nomeie a pasta Testfolder.
  2. Na pasta Testfolder, crie um item de email que tem o assunto "test".
  3. No Visual C++, criar um novo aplicativo de console de 32 bits do Windows e nomeie o aplicativo Mysample.
  4. Substitua o código no arquivo Mysample.cpp com o exemplo de código a seguir.
    #include<stdio.h>//TODO: Change the path here if your Msxml.dll file is in a different location.// for xml 4.0#import "c:\winnt\system32\msxml4.dll"using namespace MSXML2;// for xml 2.0// #import "c:\winnt\system32\msxml2.dll"// using namespace MSXML;int main(int argc, char* argv[]){   CoInitialize(NULL);   try   {   //TODO: Change the line in the following code to reflect the server.   bstr_t yourServerName = "myserver1";   bstr_t sUrl = "http://" + yourServerName +       "/public/TestFolder/test.eml";   bstr_t sMethod = "PROPFIND";            //TODO: Change the two lines in the following code to reflect your user name and password.   _variant_t vUser = L"myserver1\\User1";   _variant_t vPassword = L"password";         // for xml 4.0      MSXML2::IXMLHTTPRequestPtr pXMLHttpReq=NULL;       // for xml 2.0      MSXML::IXMLHTTPRequestPtr pXMLHttpReq=NULL;       HRESULT hr = ::CoCreateInstance(			CLSID_XMLHTTPRequest,                        NULL,                         CLSCTX_INPROC_SERVER, 			IID_IXMLHttpRequest,                       (LPVOID*)&pXMLHttpReq);   if (S_OK != hr)   {      printf("XML Http Request pointer creation failed\n");      return 0;   }   // Call open function.   _variant_t vAsync = (bool)FALSE;   pXMLHttpReq->open(sMethod,          sUrl,          vAsync,          vUser,          vPassword);   pXMLHttpReq->setRequestHeader((bstr_t)"Content-Type",       (bstr_t)"text/xml");   bstr_t sReq;   sReq =  "<?xml version='1.0'?>";   sReq = sReq +  "<d:propfind xmlns:d='DAV:'><d:prop>" +      "<d:displayname/>" + //TODO: Change to the property that you want.      "</d:prop></d:propfind>";   // Send the request to set the search criteria.   pXMLHttpReq->send(sReq);   // Obtain a response.         long lStatus;   pXMLHttpReq->get_status(&lStatus);   printf("\n~~~~~~~~\n%d\n", lStatus);   BSTR bstrResp;   pXMLHttpReq->get_statusText(&bstrResp);   printf("\n~~~~~~~~\n%s\n", (char*)(bstr_t)bstrResp);   _bstr_t bstrAllHeaders;   bstrAllHeaders = pXMLHttpReq->getAllResponseHeaders();   printf("\n~~~~~~~~\n%s\n", (char*)bstrAllHeaders);   BSTR bstrResponseText;   pXMLHttpReq->get_responseText(&bstrResponseText);   printf("\n~~~~~~~~\n%s\n", (char*)(bstr_t)bstrResponseText);      }   catch(_com_error &e)   {   printf("Error\a\a\n\tCode = %08lx\n"      "\tCode meaning = %s\tSource = %s\n\tDescription = %s\n",      e.Error(),       e.ErrorMessage(),       (char*)e.Source(),       (char*)e.Description() );   }   CoUninitialize();       return 0;}					
  5. Faça as alterações marcadas por "TODO:" no exemplo de código.
  6. Compile e, em seguida, execute o exemplo de código.

    Depois que o exemplo de código for executado, você verá o status, teste de status como "HTTP/1.1 200 OK" e a propriedade ResponseText do seu HTTPRequest . ResponseText terá o valor DisplayName que você está solicitando.

Possíveis problemas

Lendo propriedades usando um comando PROPFIND ou usando o código ActiveX Data Objects (ADO) em um coletor de eventos pode não retornar todas as propriedades em alguns computadores quando as propriedades para leitura não são explicitamente especificadas. Quando propriedades não são explicitamente especificadas, o esquema é usado para obter uma lista de propriedades para retornar. Se houver problemas com o esquema, o comando PROPFIND pode não retornar todas as propriedades que você espera. Às vezes, esse problema foi reportado após a atualização do Exchange 2000 Server para Exchange Server 2003.

Para evitar enfrentando esse problema, use um dos seguintes métodos:
  • Especifique as propriedades exatas na solicitação XML. Esse método deve funcionar mesmo se o esquema está corrompido.
  • Use o Explorer do Exchange Software Development Kit (SDK) do Exchange para exibir propriedades do item. Se as mesmas propriedades não são retornadas, o esquema é provavelmente a causa do problema. Exchange Explorer usa o comando "PROPFIND allprops" para recuperar propriedades.
  • Especifique todos os namespaces dos itens que são necessários no XML de um comando PROPFIND usando o parâmetro allprops .
Se você achar que o esquema está corrompido, talvez queira entrar em contato com o Atendimento Microsoft.

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 289867 - Última Revisão: 12/06/2015 00:40:48 - Revisão: 3.4

Microsoft Exchange 2000 Server Standard Edition, Microsoft XML Core Services 4.0, Microsoft XML Parser 2.0, Microsoft XML Parser 2.5, Microsoft XML Parser 2.6, Microsoft XML Parser 3.0, Microsoft Visual C++ 6.0 Enterprise Edition, Microsoft Visual C++ 6.0 Professional Edition, Microsoft Visual C++, 32-bit Learning Edition 6.0, Microsoft Exchange Server 2003 Enterprise Edition, Microsoft Exchange Server 2003 Standard Edition

  • kbnosurvey kbarchive kbmt kbhowto kbmsg KB289867 KbMtpt
Comentários