Disarm IE: My Dev Wishlist for Other Browsers

Dean got me thinking about this
IE has many interesting development features which are well, a bit non-standard.  Well okay, they’re utterly made up with nary a W3C spec in sight.  Among them:

  • DHTML Behaviors
  • Databinding & Data Source Objects
  • CSS Visual Filters
  • CSS Expressions
  • Conditional Comments
  • The “defer” attribute

Here’s what caught my attention about these tools: sure they’re not standards-based, but they’re frickin’ great!

I’ve often said Microsoft overuses the word “innovate,” especially in regards to their own products.  However, compared to other browsers, these technologies genuinely seem innovative, and are the reason I (and many others) have written so many IE-only web apps.  Microsoft didn’t wait on someone else (e.g. the W3C), they just said “devs could use this”, and wrote it.

(My IE-only days are not a confession I’m proud of these days, but it’s true, and those developer-persuasion props are well-deserved.)

Other non-standard features have since been adopted by other browsers, creating de facto standards.  A notable example is Microsoft’s XMLHTTPRequest object which is now so popular thanks to the AJAX fad). 

Fan clubs aside, I love this phenomenon — a great tool is now widely available.  Since I can now count on it, I have more reason to write cross-browser apps. 

So hear this Apple, Konqueror, Mozilla and Opera: please forget your egos, and swipe more dev technology ideas from Microsoft.  Really.

Do it for the children?

Oh Joyous Day for IE7

From the IE Blog: we’ve also rebuilt the <select> element as a windowless control.

I noticed this first via Web Standards Project Buzz, where Lloydi rightly hopes they’ve fixed IE‘s myriad other SELECT problems.

As evidenced by my IE Bug Wiki participation, IE SELECT bugs demo, and IE bug solutions, this means a lot to me.

There’s a ton of other great news from the IE team there, including Page Zoom, tabs, integrated search, and Quick Tabs.  It sounds awesome — don’t miss it!

Another SBS SP1 hangup

I upgraded another client’s SBS 2003 machine to SP1 this past weekend.  It went remarkably smoothly, but we forgot to check their smartphones’ access to Exchange til today.  No connection, we checked the /OMA virtual directory, and got this error:

“A System error has occurred while processing your request. Please try again. If the problem persists, contact your administrator.”

Much “jiggling” (yknow, rerunning wizards, regenerating the web certificate, etc), and googling got me no answer.  I did see this error in the Application Log, though:

An unknown error occurred while processing the current request:
Message: The remote server returned an error: (403) Forbidden.
Source: Microsoft.Exchange.OMA.ExchangeDataProvider
Stack trace:
   at Microsoft.Exchange.OMA.ExchangeDataProvider.OmaWebRequest.GetRequestStream()
   at Microsoft.Exchange.OMA.ExchangeDataProvider.ExchangeServices.GetSpecialFolders()
   at Microsoft.Exchange.OMA.ExchangeDataProvider.ExchangeServices..ctor(UserInfo user)

Message: Exception has been thrown by the target of an invocation.
Source: mscorlib
Stack trace:
   at System.Reflection.RuntimeConstructorInfo.InternalInvoke(BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean isBinderDefault)
   at System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)
   at System.Activator.CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)
   at Microsoft.Exchange.OMA.UserInterface.Global.Session_Start(Object sender, EventArgs e)

Message: Exception of type Microsoft.Exchange.OMA.DataProviderInterface.ProviderException was thrown.
UserMessage: A System error has occurred while processing your request. Please try again. If the problem persists, contact your administrator.
Source: Microsoft.Exchange.OMA.UserInterface
Stack trace:
   at Microsoft.Exchange.OMA.UserInterface.Global.Session_Start(Object sender, EventArgs e)
   at System.Web.SessionState.SessionStateModule.RaiseOnStart(EventArgs e)
   at System.Web.SessionState.SessionStateModule.CompleteAcquireState()
   at System.Web.SessionState.SessionStateModule.BeginAcquireState(Object source, EventArgs e, AsyncCallback cb, Object extraData)
   at System.Web.AsyncEventExecutionStep.System.Web.HttpApplication+IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.

What a mess.  But I recognized that “(403) Forbidden” as a web server error (although not on the actual OMA directory).  Combining that with info from similar OMA issues, I checked the /exchange-oma virtual directory’s settings, and aha! it was denying access to all IP addresses except and one we don’t use.  It was not making an exception for the primary local address.  So I added that and all’s now good.

So when you’re having OMA problems, try the usual stuff (including checking the OMA virtual directory), then also check settings on the exchange-oma virtual directory.

Lesson learned.

Update 2008-11-07:
Ha!  I was troubleshooting for a customer, and found my own post (top of the google to ya, 3 years later!)  It wasn’t the same issue, but it was similar enough to set me on
the right track.