2010-06-23 2 views
0

데비안 리눅스에 WebDav 서버를 설치하고 적절한 권한을 부여했습니다.Linux WebDav에 배포 된 폴더 및 파일 목록을 가져 오는 방법은 무엇입니까?

나는 다음과 같은 오류가 무엇입니까 코드를 다음 throgh 폴더 목록 (SEARCH)에 액세스하려고하는 동안 :

The remote server returned an error: (405) Method Not Allowed. 

사용되는 코드는 다음과 같습니다

try{ 
    strQuery = "<?xml version=\"1.0\"?><D:searchrequest xmlns:D = \"DAV:\" >"; 
        strQuery += "<D:sql>SELECT \"DAV:href\" FROM scope('hierarchical traversal of \""; 
        strQuery += strRootURI + "\"')</D:sql></D:searchrequest>"; 

        // Create a new CredentialCache object and fill it with the network 
        // credentials required to access the server. 
        MyCredentialCache = new System.Net.CredentialCache(); 
        MyCredentialCache.Add(new System.Uri(strRootURI), 
         "NTLM", 
         new System.Net.NetworkCredential(strUserName, strPassword) 
         ); 

        // Create the HttpWebRequest object. 
        Request = (System.Net.HttpWebRequest)HttpWebRequest.Create(strRootURI); 

        // Add the network credentials to the request. 
        Request.Credentials = MyCredentialCache; 

        // Specify the method. 
        Request.Method = "SEARCH"; 

        // Encode the body using UTF-8. 
        bytes = Encoding.UTF8.GetBytes((string)strQuery); 

        // Set the content header length. This must be 
        // done before writing data to the request stream. 
        Request.ContentLength = bytes.Length; 

        // Get a reference to the request stream. 
        RequestStream = Request.GetRequestStream(); 

        // Write the SQL query to the request stream. 
        RequestStream.Write(bytes, 0, bytes.Length); 

        // Close the Stream object to release the connection 
        // for further use. 
        RequestStream.Close(); 

        // Set the content type header. 
        Request.ContentType = "text/xml"; 

        // Send the SEARCH method request and get the 
        // response from the server. 
        Response = (HttpWebResponse)Request.GetResponse(); 

        // Get the XML response stream. 
        ResponseStream = Response.GetResponseStream(); 

        // Create the XmlTextReader object from the XML 
        // response stream. 
        XmlReader = new XmlTextReader(ResponseStream); 

        // Read through the XML response, node by node. 
        while (XmlReader.Read()) 
        { 
         // Look for the opening DAV:href node. The DAV: namespace is 
         //typically assigned the a: prefix in the XML response body. 
         if (XmlReader.Name == "a:href") 
         { 
          // Advance the reader to the text node. 
          XmlReader.Read(); 

          // Display the value of the DAV:href text node. 
          Console.WriteLine("Value: " + XmlReader.Value); 
          Console.WriteLine(""); 

          //Advance the reader to the closing DAV:href node. 
          XmlReader.Read(); 
         } 
        } 

        // Clean up. 
        XmlReader.Close(); 
        ResponseStream.Close(); 
        Response.Close(); 
} 

난을 얻은을 코드는 http://msdn.microsoft.com/en-us/library/ms992615(EXCHG.65).aspx

답변

1

검색에서만 지원되며 일부 서버에서는 지원되지 않으며 D : sql 문법은 Microsoft에서 발명 한 것으로, ent 일부 Microsoft 서버.

정말 원하는 것은 PROPFIND (RFC 4918, Section 9.1)입니다.

관련 문제