Removing a Lock from an Item

Removing a Lock from an Item

This content is no longer actively maintained. It is provided as is, for anyone who may still be using these technologies, with no warranties or claims of accuracy with regard to the most recent product version or service release.

The following example uses the UNLOCK Method to remove a write lock from an item. The lock token submitted in the Lock-Token request header is the lock token that was returned from the LOCK Method request that placed the lock on the item.

VBScript

dim strURL
dim req

' The URL of the item that the lock is being removed from.
strURL = "https://server/public/TestFolder1/test.txt"

' Create the XMLHTTP object.
set req = createobject("microsoft.xmlhttp")

' Specify the UNLOCK method, the URL of the resource to unlock, that the request will be sent synchronously,
' the user name, and the password.
req.open "UNLOCK", strURL, false, "Domain\Username", "!Password"

' Set a depth of 0.
req.setrequestheader "Depth", "0"

' Set the Lock-Token header to the value of the Lock-Token returned in the LOCK response.
req.setrequestheader "Lock-Token", "<opaquelocktoken:BADAOF19-BE44-4BF2-87B3-95EBD896AE6:XN63>"

' Send the UNLOCK request.
req.send

' An error occurred on the server.
If req.status >= 500 Then
   wscript.echo "Status: " & req.status
   wscript.echo "Status text: An error occurred on the server."

' Display the request status and the UNLOCK response text.
Else
   wscript.echo "Status: " & req.status
	wscript.echo "Status text:  " & req.statustext
   wscript.echo "Response text: " & req.responsetext

End If

The following example uses the UNLOCK Method to remove a write lock from an item. The lock token submitted in the Lock-Token request header is the lock token that was returned from the LOCK Method request that placed the lock on the item.

C++

#include <stdio.h>
#include <iostream.h>

// If necessary, change the file path if your msxml.dll file is
// in a different location.

#import "c:\windows\system32\msxml.dll"

// To use MSXML 4.0, import the dll msxml4.dll instead of msxml.dll as follows:
// #import "c:\windows\system32\msxml4.dll"
// using namespace MSXML2;

using namespace MSXML;

int main(int argc, char* argv[])
{
   CoInitialize(NULL);

   // Variables.
   MSXML::IXMLHttpRequest* pXMLHttpReq=NULL;
   bstr_t sUrl = "https://server/public/TestFolder1/test.txt";
   bstr_t sMethod = "UNLOCK";
   _variant_t vUser = L"Domain\\Username";
   _variant_t vPassword = L"!Password";
   _variant_t vAsync = (bool)FALSE;
   long lStatus = 0;
   BSTR bstrResp;
   BSTR bstrResponseText;
   HRESULT hr;

   // Initialize the XMLHTTPRequest object pointer.
   hr = ::CoCreateInstance(__uuidof(XMLHTTPRequest),
                           NULL,
                           CLSCTX_INPROC_SERVER,
                           __uuidof(IXMLHttpRequest),
                           (LPVOID*)&pXMLHttpReq);

   // If you are using MSXML 4.0, use the following to initialize pXMLHttpReq:
   // IXMLHTTPRequestPtr pXMLHttpReq= NULL;
   // HRESULT hr=pXMLHttpReq.CreateInstance("Msxml2.XMLHTTP.4.0");

   // Check the status of pointer creation.
   if (S_OK != hr)
   {
      cout << "XMLHttpRequest pointer creation failed." << endl;
      return 1;
   }

   try
   {
      // Open the XMLHTTPRequest object with the LOCK method and
      // specify that it will be sent asynchronously.
      pXMLHttpReq->open(sMethod,
                        sUrl,
                        vAsync,
                        vUser,
                        vPassword);

      // Set the Depth header to 0.
      pXMLHttpReq->setRequestHeader((bstr_t)"Depth", (bstr_t)"0");

      // Set the lock token-header to the lock token returned in the LOCK response.
      pXMLHttpReq->setRequestHeader( (bstr_t)"Lock-Token",
                                     (bstr_t)"<opaquelocktoken:BADAOF19-BE44-4BF2-87B3-95EBD896AE6:XN63>" );

      // Send the UNLOCK method request.
      pXMLHttpReq->send();

      // Get the response status.
      pXMLHttpReq->get_status(&lStatus);

      // An error occurred on the server.
      if(lStatus >= 500)
      {
         cout << "Status: " << lStatus << endl
              << "Status text: An error occurred on the server."
              << endl;
      }

      else
      {
         // Display the response status.
         cout << "Status: " << lStatus << endl;

         // Display the response status text.
         pXMLHttpReq->get_statusText(&bstrResp);
         cout << "Status text: " << (char*)(bstr_t)bstrResp << endl;

         // Display the response text.
         pXMLHttpReq->get_responseText(&bstrResponseText);
         cout << "Response text: " << (char*)(bstr_t)bstrResponseText << endl;
      }

      // Release the memory.
      pXMLHttpReq->Release();
   }

   catch(_com_error &e)
   {
      // Display the error information.
      cout << "Error code: " << (char*)e.Error() << endl
           << "Error message: " << (char*)e.ErrorMessage()
           <<endl;

      // Release the memory.
      pXMLHttpReq->Release();

      return 1;
   }

   CoUninitialize();

   return 0;
}   

Send us your feedback about the Microsoft Exchange Server 2003 SDK.

Build: June 2007 (2007.618.1)

© 2003-2006 Microsoft Corporation. All rights reserved. Terms of use.