Le Café Central de Deva
... Deva blogs!!
I changed the way of blogging, developing, designing and assisting my customers. Re-designed the site and started using the latest Windows Live Writer & Windows 10!! Additionally added Microsoft Translator gadget available @ top of page, so that you can change the page in your preferred language!!
I was playing around debugging a custom app in one of my Windows 7 & Visual Studio 2010. When I tried running msvsmon.exe (Remote Debugging Monitor) and got the following error message when attempting to remote debug:
Error while trying to run project: Unable to start debugging.
This operation returned because the timeout period expired.
During further investigation, I found that the issue is that the firewall is not setup properly on the Win7 machine for remote debugging. I noticed that when msvsmon first launches, it will prompt the user to configure the firewall.
Per the debugger blogpost, this happens due to the firewall security API changes since Vista, the prompt may not come up. I tried the following workaround to move ahead:
Control Panel->System and Security->Windows Firewall: Change notification settings -> enable Notify me when Windows Firewall blocks a new program ->Ok
After implementing the above, I started remote debugging again and this time I can notice that msvsmon shows popup a windows security alert dialog box that prompt to grant access permission to msvsmon.
The Windows Phone SDK 7.1.1 Update is now available for your download.
It enables Windows Phone developers to do two things:
The 7.1.1 Update is really just that – it’s an update to the existing WPSDK: it doesn’t add much in the way of new features to your WPSDK installation; it updates your existing install to do a few new tricks:
Please find the developer webcasts for Exchange Server 2010. If you're planning to create your own custom application using Exchange Server 2010, i would recommend you to start from this.
In this Webcast, Jason Henderson gives an overview of what to consider when migrating applications that rely on Exchange Server and highlights the resources that are available on the Web to help you.
In this Webcast, David Claux provides a deep dive into the Autodiscover service, explains how you—as a developer—can use it to your advantage for your custom Exchange Server application, and highlights the resources that are available on the Web to help you.
In this Webcast, Alice Tang provides a deep dive into which mechanism to use when, explains what to consider when implementing these features, and highlights the resources that are available on the Web to help you.
In this Webcast, Andrew Salamatov gives an overview of your options to either implement push event notifications or pull notifications in a scalable fashion and highlights the resources that are available on the Web to help you.
In this Webcast, David Claux provides a deep dive into the EWS Managed API and describes how it can help you, even if you develop applications that are not based on the Microsoft .NET Framework.
In this Webcast, Raz Mathias provides an overview of the things to consider when building Exchange Server applications on Microsoft Exchange Server 2007, Exchange 2010, or Exchange Online and describes the resources that are available on the Web to help you. The session primarily focuses on Exchange Web Services APIs.
Information for the availability service is provided via our open specifications document: [MS-OXWAVLS]. Information for the security model used in the availability service, please reference the following document: [MS-OXCPERM].
For more info, you can refer:
Availability Web Services Protocol specification: http://msdn.microsoft.com/en-us/library/cc463891(v=exchg.80).aspx or http://download.microsoft.com/download/5/D/D/5DD33FDF-91F5-496D-9884-0A0B0EE698BB/[MS-OXWAVLS].pdf or http://download.microsoft.com/download/5/D/D/5DD33FDF-91F5-496D-9884-0A0B0EE698BB/Exchange_Protocols.zip.
In this post, we will see how to access user free/busy information programmatically using Exchange Web Services (EWS) – Proxy. Exchange provides such a service by storing what is referred to as free/busy data. This information will indicate what requested time range is free, busy, and tentative for a particular user. It will also provide any out of office (oof) status as well. Free/Busy data can be obtained using the Availability service provided by the Exchange Server. This is simply a web service which obtains the free/busy data directly from a user’s calendar. Specifically, the GetUserAvailability operation will provide the free/busy state at specific level of detail.Using GetUserAvailability operation, which provides current user availability information at a specified level of detail - about the availability of a set of users, rooms, and resources within a specified time period. Client applications such as Microsoft Office Outlook, Microsoft Outlook Web Access, Microsoft Outlook Mobile Access, and other applications use SMTP addresses to identify the requested user information. Let start now by creating the binding, set the credentials/URL and pass the binding (esb) to the following functionality ( which I haven’t added here).
Identify the time to compare free/busy information:
Duration duration = new Duration();
duration.StartTime = DateTime.Now;
duration.EndTime = DateTime.Now.AddHours(4);
Identify the options for comparing free/busy information:
FreeBusyViewOptionsType fbViews = new FreeBusyViewOptionsType();
fbViews.TimeWindow = duration;
fbViews.RequestedView = FreeBusyViewType.MergedOnly;
fbViews.RequestedViewSpecified = true;
fbViews.MergedFreeBusyIntervalInMinutes = 35;
fbViews.MergedFreeBusyIntervalInMinutesSpecified = true;
Identify the user mailbox to review for free/busy data: MailboxData mbx= newMailboxData;
mbx = new MailboxData();
EmailAddress emailAddress = new EmailAddress();
emailAddress.Address = "firstname.lastname@example.org";
emailAddress.Name = String.Empty;
mbx.Email = emailAddress;
mbx.ExcludeConflicts = false; Make the request and set the time zone of the request: getusrRequest.TimeZone = newSerializableTimeZone();
getusrRequest.TimeZone.Bias = 480;
getusrRequest.TimeZone.StandardTime = newSerializableTimeZoneTime();
getusrRequest.TimeZone.StandardTime.Bias = 0;
getusrRequest.TimeZone.StandardTime.DayOfWeek = DayOfWeekType.Sunday.ToString();
getusrRequest.TimeZone.StandardTime.DayOrder = 1;
getusrRequest.TimeZone.StandardTime.Month = 11;
getusrRequest.TimeZone.StandardTime.Time = "02:00:00";
getusrRequest.TimeZone.DaylightTime = new SerializableTimeZoneTime();
getusrRequest.TimeZone.DaylightTime.Bias = -60;
getusrRequest.TimeZone.DaylightTime.DayOfWeek = DayOfWeekType.Sunday.ToString();
getusrRequest.TimeZone.DaylightTime.DayOrder = 2;
getusrRequest.TimeZone.DaylightTime.Month = 3;
getusrRequest.TimeZone.DaylightTime.Time = "02:00:00";
In addition to that, add the mailbox and the view options to the request getusrRequest.MailboxDataArray = mbx;
getusrRequest.FreeBusyViewOptions = fbViews;
Send the above request and get the response: GetUserAvailabilityResponseType getusrResponse = esb.GetUserAvailability(getusrRequest);
Access the free/busy info:
if(getusrResponse.FreeBusyResponseArray.Length < 1)
Console.WriteLine("No free/busy response data available.");
foreach(FreeBusyResponseType fbrt in getusrResponse.FreeBusyResponseArray)
if(fbrt.ResponseMessage.ResponseClass == ResponseClassType.Error)
Console.WriteLine("Error:" + fbrt.ResponseMessage.MessageText);
FreeBusyView fbv = fbrt.FreeBusyView;
Console.WriteLine("Merged free/busy data: " + fbv.MergedFreeBusy);
If you run the above piece of code, then you will get the result:
For more information, you can refer the following article: http://msdn.microsoft.com/en-us/library/aa564001(v=exchg.140).aspx
Public Folders are used in earlier versions of Microsoft Exchange Server to store free/busy data and files. From Microsoft Exchange Server 2007, free/busy data is no longer stored in public folders. It’s recommend that you do not store files in public folders in Exchange 2007. Instead, consider using Microsoft Office SharePoint, or Windows SharePoint Services. Public folders are included and supported in Exchange 2007 and 2010. However, future releases of Microsoft Exchange might not include public folders. You can visit http://blogs.technet.com/b/exchange/archive/2006/02/20/419994.aspx. Also, you can refer MS Exchange team blog have posted the updated public folder guidance for versions of Exchange past Exchange 2007.
So, what are my options?
If you're building something new, you should look at the requirements and building on the SharePoint Technologies platform:
+ Starting with Exchange 2007, we recommend that applications use the Availability service to provide free/busy data for Exchange mailbox users. Windows SharePoint Services replaces the file sharing functionality that public folders provide. You must redesign applications that use public folders to use Exchange Web Services. + Also consider redesigning custom applications as early as possible as future versions of Microsoft Exchange may not contain public folders. + In addition to that you can refer the wonderful blogpost by Joel.
Are you a C++ developer? Then, its for you. Recently I was watching Channel9, “GoingNative 2012” - wonderful sessions on C++. Please find the related links for your reference:
Recently one of my developer customer (developer of PC and mobile based applications) was asking is there any difference available between Outlook Object Model (OOM) API and Pocket Outlook Object Model (POOM) API? If yes, where it's documented? As you know, the Pocket Outlook Object Model (POOM) API is a COM-based library that provides programmatic access to Personal Information Manager (PIM) data on mobile devices. It provides functionality for manipulating PIM-item collections and folders. I pointed him to have a look at the MSDN document, which points at the principal differences between the Pocket Outlook Object Model and the Outlook object model.
I got the latest Windows Phone update: 7.10.8107.79 It fixes the following:
To learn how to install updates, check if there's an update available for you to download, and determine which version of Windows Phone you have now, see Phone updates FAQ.
Here it comes… Kinect for Windows. You can use the power of Kinect to change the world. Kinect has changed the way people play games and experience entertainment. Now, Kinect for Windows offers the potential to transform how people interact with computers and Windows-embedded devices in multiple industries, including education, healthcare, retail, transportation, and beyond. The release of the Kinect for Windows sensor and software development kit (SDK) for commercial applications opens up the limitless possibilities offered by Kinect technology. Together, the hardware and software offer a superior development platform for Windows and a higher quality, better performing experience for end users Are you a developer and want to thrive to Develop what's next, then your journey starts here… The Kinect for Windows sensor and SDK give you the tools you need to develop innovative applications that harness speech and human tracking. Now, the power is in your hands to enable people to interact with technology in completely new and exciting ways. You can download the Kinect SDK @ Download SDK Getting Started: Use these programming guides to help you get started with the Kinect for Windows system.
Got developer queries: Your development questions answered before you even asked them. Note: for all other questions, reference the General FAQ.
In addition to that, if you want to see what can be done, then you can have a look at the gallery. Also you can view the following video clip:
The Blog Get our latest updates and read stories about the amazing applications companies are creating with Kinect for Windows.
Facebook Take part in our Facebook community, where we'll be sharing ongoing news and information.
Twitter Follow us on Twitter and be part of the movement. #kinectforwindows
Forums Share advice and provide feedback about Kinect for Windows in our technical forums
Create a new world around you with Kinect and unleash its power!!
Are you ready for “Office 15”? Hough, CVP of Office Division announced in his blog that they reached an important milestone: the beginning of “Office 15” Technical Preview program. It also points that the Technical Preview program is already full, but everyone will have the opportunity to try the Office 15 public beta later this summer.
Recently i was working with a developer customer, who created an Visual Basic/COM+ based solution (internally uses the Microsoft Messaging library). In general, he wants to know whether they should use CreateObject or CreateInstance? Whether both will have the same or different same effect in COM+? In Microsoft Transaction Server (MTS), you must use ObjectContext.CreateInstance in your root object to create secondary objects for the transaction to flow. In COM+ this still works, but it is no longer necessary to do it. In COM+, CreateObject subsumes the functionality of ObjectContext.CreateInstance. The object created participates in the caller's activity. In COM+, you can use the standard CreateObject function in Microsoft Visual Basic to flow a transaction to secondary objects as appropriate. So, CreateObject and CreateInstance have the same effect in COM+.
Using MSDN Forum Assistant and TechNet Forum Assistant gadgets offer a convenient way for the forum users to read the forum recent threads and your own threads, it also make it easy to create new threads and search in the forum. How is simple is that…. I tried the gadgets at my Windows 7 machine in 3 simple steps 1. Double-click the gadget installation package.
2. On the popup window, click “Install” to finish the installation.
3. The gadget usually will be automatically located on the desktop. If not, look it up from the Gadget Gallery and add it to the desktop
I like the following excerpts which I liked from the interview: “you can copy and paste the code but are you know whether this is right to do in your context”, “architect should constant likely at the technical aspect of the project”. This is a great interview to catch if you're headed down this career path!
Click here to view the video:
Recently one of my developer customer migrated from Outlook 2003 to 2010. He tried running the custom application (uses CDO & Outlook 2003) in Outlook 2010. It throws the error “ActiveX component can’t create object”. Using the following test sample, I can reproduce the exact issue at my end:
As you know, Microsoft Outlook 2010 includes many architectural changes to the client-side MAPI subsystem. Of particular concern are scenarios in which Outlook is configured to use multiple Exchange accounts. Also, CDO 1.2.1 is a 32-bit client library and will not operate with 64-bit Outlook 2010. Given all these factors, CDO 1.2.1 is not supported for use with Outlook 2010 and we don’t recommend its usage with Outlook 2010. As updated earlier, in Outlook 2010 you need to re-write/migrate the code base referencing CDO to Outlook Object Model or MAPI, messaging libraries which ever suits you. So the programs/custom applications that use CDO should be re-designed to use other Application Programming Interfaces (APIs) instead of CDO. Starting with Outlook 2007, the Outlook object model was greatly expanded to provide functionality that was previously available only by using CDO 1.2.1. The Outlook 2010 object model includes some new features to expand on this more. For example, the Outlook 2010 object model has new functionality to operate correctly with multiple Exchange accounts. The Outlook object model also works for both 32-bit and 64-bit versions of Outlook. Developers should use the Outlook 2010 object model instead of CDO 1.2.1. Also, developers can still use Extended MAPI (which requires unmanaged C++) in some scenarios where CDO was required. However, if it is possible, we generally recommend that the Outlook object model be used instead of Extended MAPI.
In this post, we will take the above code sample and will show how you can migrate/re-write the CDO based application to Outlook Object Model library.
1: Dim MapiSession As Object
2: Dim MapiMessage As Object
6: Set MapiSession = CreateObject("Mapi.Session") ' Create the MAPI Session.
8: MapiSession.Logon , , , False ' Log on to the session.
10: Set MapiMessage = MapiSession.Outbox.Messages.Add
12: With MapiMessage
13: .To = "email@example.com"
14: .Subject = "Test"
15: .Text = "Test"
16: .send showdialog:=True
17: End With
21: Set MapiSession = Nothing ' Clear the object variable.
Once you done with migration, the OOM code (created in Outlook 2010) will look like the below:
1: Dim MapiSession As Outlook.Application
2: Dim MapiMessage As Outlook.MailItem
4: Set MapiSession = CreateObject("Outlook.Application") ' Create the MAPI Session.
5: MapiSession.GetNamespace("MAPI").Logon , , , False
7: Set MapiMessage = MapiSession.CreateItem(olMailItem)
8: With MapiMessage
9: .To = "firstname.lastname@example.org"
10: .Subject = "Test"
11: .Body = "Test"
13: End With
15: Set MapiSession = Nothing
Please note: Microsoft product support can help developer customers migrate custom programs from using CDO 1.2.1 to using other APIs. However, Microsoft will not provide support for any scenarios in which CDO 1.2.1 is used with Outlook 2010.
1. Disconnect all devices/desktop apps and login with browser 2. Delete Facebook account (connected with Hotmail account) using the browser 3. Boot the phone 4. In Phone, Sync the Hotmail account. At end of this, delete the Facebook account 5. Now you can connect the Facebook account using Settings > Email+accounts > Facebook in the phone.
Note: Prior to that I learnt that he is connected with messenger desktop app browser, Windows Phone to the Hotmail account. Also the Facebook updates, notifications, still seem to work, but only chat doesn't
1: Sub TestSearch()
3: Dim fpath As String
4: Dim oStre As Outlook.Store
6: For Each oStre In Outlook.Session.Stores
7: fpath = "'" & oStre.GetRootFolder.folderPath & "'"
8: Debug.Print fpath & " IsSearchSynchronous = " & Application.IsSearchSynchronous(fpath)
11: End Sub
+ You must enclose the folder path (fpath) with single quotes – refer the above example
+ If the search is synchronous, the AdvancedSearch method will not return until the search has completed.
+ On the contrary, if the search is asynchronous, the AdvancedSearch method will immediately return.
+ In order to get meaningful results from an asynchronous search, use the AdvancedSearchComplete event to notify you when the search has finished.
Recently I was talking to one of my customer. He was suggesting why MS should consider SQL instead of ESE(Extensible Storage Engine) db. It just remembered the famous old blog post at Exchange team blog – just referenced him the same
I am sharing this as couple of my customers were enquiring is there any changes or effects of Client Shutdown in MAPI (Outlook 2010 fast shutdown).
MAPI clients can shut down the same way as before, or if needed, they can use fast shutdown. In Outlook 2010, MAPI subsystem provides the IMAPIClientShutdown : IUnknown interface. If a MAPI client needs to adopt fast shutdown, then they can make use of it. In order to implement the shutdown, MAPI client to initiate a quick shutdown of the client process, notifying all providers with which the client has an active MAPI session to save data and settings before the client process exits.
For more info, you can refer the related articles:
Fast Shutdown Overview: Basic mechanism of fast shutdown Fast Shutdown User Options: Choices available for administrators to adopt fast shutdown at the user level for the user’s MAPI Clients Best Practices for Fast Shutdown: best practices to use the fast shutdown interfaces to help prevent data loss during a MAPI client shutdown.
You can refer Ryan’s post, along with couple of related articles by Steve @ Fastest Shutdown In The West and When I Say Shutdown, I Mean Shut. Down.
One of my customers reported an issue while they were reading a recurrence calendar with exceptions using Exchange Web Service (EWS) API. Their EWS application uses EWS WSDL to generate stub and uses that to access the server to read the calendar items from Exchange Server 2010. As part of the business logic, they read exception instance of a recurring meeting to access the recurrence-id using GetItem() call, but the Recurrence-ID was not returned under this scenario:
<t:ItemId Id="AAMkAGJmODU0Y2RkLTMzNWQtNDU0Zi04ZTRmLWZkYmY3NjMzMmY5NwBGAAAAAAAYgD84Mql7RaeCH1aLb3byBwBsPRpqddOASYFOcLJOFXFtAAAABxwqAABsPRpqddOASYFOcLJOFXFtAAABQSkXAAA=" ChangeKey="DwAAABYAAABsPRpqddOASYFOcLJOFXFtAAABQgc0"/>
<t:EmailAddress> email@example.com </t:EmailAddress>
<t:TimeZone>GMT -0600 (Standard) / GMT -0500 (Daylight)</t:TimeZone>
When we analyzed the issue happens only with meetings created/modified using Outlook 2003 SP3 clients. The same issue doesn’t occur not with Outlook 2007 & 2010 clients. Due to this issue, their application logic was broken. We tried using FindItem() call, instead of GetItem() but it didn’t make any difference. As part of troubleshooting we noticed that the recurrence-id doesn’t available in the GetItem() response XML; but using the MimeContent, we can parse it manually, look for recurrence-id and can overcome this issue.
foreach (Item it in fiResults.Items)
MimeContent mc = it.MimeContent;
//Your application logic goes here: Parse the above MimeContent & look for recurrence-id
But this turned out not a feasible solution for them as it might be much dependent on Mime encoding type being used as well as the format of recurrence-id is different from what they get as part of GetItem() response. Apart from this, I don’t see any fix/design change/new feature request for Outlook 2003, which is already in extended support.
Try the following steps to disable add-ins in Outlook 2007 (it also applies to InfoPath 2007, Project 2007 and Visio 2007)
On the Tools menu, click Trust Center.
In the categories pane, click Macro Security.
In the details pane, select No Warnings and Disable All Macros or Warnings for signed macros; all unsigned macros are disabled.
In the categories pane, click Add-ins.
In the details pane, select Apply macro security settings to installed add-ins
The Microsoft Online Services Migration Tools is used to support migration of Microsoft Exchange to Microsoft Online Services. You can use the Microsoft Online Services Migration Tools to forward copies of your Exchange Server mail to your Exchange Online mailboxes. You can also use the Migration Tools to copy content from your Exchange Server, POP3, or IMAP4 e-mail server mailboxes to your Exchange Online mailboxes. This product intended for use with Microsoft Online Services only. You can download Microsoft Online Services Migration tools (32-bit | 64-bit).