One of the critical components of an Office Add-in is the add-in manifest. This is the xml file that describes how your add-in should be activated when an end user installs and uses it with Office documents and applications. This manifest contains references to URLs where your web application resides and also to other resources for your add-in such as images to show on ribbon buttons and task panes.
Your manifest.xml file is uploaded to a central location where it is made available to users of your add-in (this may be a public location such as AppSource or the Office Store).
When users acquire your add-in a copy of the manifest.xml file is cached onto the host device and is only periodically resynced if the manifest.xml file is subsequently updated in AppSource/Office Store. I have seen this take weeks on some combinations of host products/devices.
You need to be careful if you are modifying your application and the changes involve modifications to the URLs in the manfiest.xml file. Imagine your add-in has been deployed and is in use by many users. The manifest.xml file might look similar to the fragment below (notice the SourceLocation URL on line 13).
That SourceLocation URL (line 13) is the main page of the add-in that gets loaded into the Task Pane when the add-in is launched. Lets imagine you change the structure of this add-in so that the starting page of the app is now https://www.contoso.com/apps/search/index.html
For this we would change the SourceLocation DefaultValue from “https://www.contoso.com/search_app/Default.aspx”
to “https://www.contoso.com/apps/search/index.html”
How do you go about deploying the updated manifest file that points to this new URL?
If you update the manifest.xml file with the new URL you then have to go through the AppSource/Office Store submission process to get the new manifest approved. You are far from 100% in control of the approval process so you don’t know when the new manifest will get approved and thus when the new URL will come into effect. So do you need to keep your application running at both the old and the new URL at least until the new manifest is approved? It gets a little worse than that though, it seems the deployment of a manifest change can take weeks to reach “saturation” whereby it had propagated down to all client host product caches and the old manifest is no longer being used. I can’t exactly tell you how long this process takes and if it ever fully reaches “saturation” as I’m still seeing some users hitting my service on a URL in a manifest that was superseded almost 3 months ago!
Rather than keeping your old and new application running side by side, the approach I have taken that works quite nicely is to put in place temporary redirects from any URLs that were present in the old manifest and have changed in the new manifest. I suggest creating these as temporary redirects as you will be able to monitor your traffic over time and know when you have reached saturation and you stop getting users coming in on URLs from old manifests. If you use permanent redirects, this may get cached by the client and next time the client will have done the redirect itself and you will no longer be able to track if the new manifest has been deployed or it’s an old manifest being redirected via a client side cached redirect.
How do you go about implementing temporary redirects? Well this depends on what you’ve developed your website using and how you are hosting it. In my case I am hosting the app as a Web App in Azure, redirects can be configured in the web.config file that is located in the root folder of the Web App.
Below is an example web.config file that would achieve that temporary redirection.
Hi,
in my manifest i set SourceLocation with a public address like “httsp://mywebsite.com/add-in/taskpane.html” but when i try to run i have “SCRIPT5022: SecurityError”
I fi change public url with “https://localhost:3000/taskpane.html” all works fine.
Can younhelp me to solve it?
Thanks, Stantis
LikeLiked by 1 person
Hi Stantis. There’s a typo in the SourceLocation you posted (ensure it’s https://) but I’m assuming that was just a typo in the comment. If you can, just hit your page directly in a web browser and ensure it runs without security errors, that may help identify if it is the add-in framework that’s blocking or if it is something in your code on the page.
LikeLike
Hi,
I had a couple questions:
– Does your scenario above include bumping the version number of the new manifest? (ie bumping the manifest version did not affect how long the old manifest was cached for)
– Do the URLs you are redirecting to need to be specified in the AppDomains portion of the manifest?
thanks
LikeLike
Hi,
I had a couple questions:
– Does your scenario above include bumping the version number of the new manifest? (ie bumping the manifest version did not affect how long the old manifest was cached for)
– Do the URLs you are redirecting to need to be specified in the AppDomains portion of the manifest?
thanks
LikeLiked by 1 person
Hi – you should bump the version number for sure. When I wrote this article I was bumping version number and it didn’t make a difference to deployment speed. I suspect the domain of any URL your are redirecting to will need to be listed in the AppDomains portion of the manifest (I haven’t tested this).
LikeLiked by 1 person