StoreFront Favorites/Subscriptions

Last Modified: Sep 23, 2020 @ 7:12 am

Navigation

Change Log

Favorites/Subscriptions Overview

By default, StoreFront allows users to select applications as their Favorites. These subscribed applications are then displayed in the Favorites view of Receiver. Administrators can also use KEYWORDS in published application descriptions to auto-favorite an application.

The Favorites (subscriptions) are stored in a file database on each StoreFront server and are automatically replicated to every StoreFront server in a local Server Group. For StoreFront servers in multiple datacenters, you can configure replication of subscriptions between Server Groups. This provides a consistent user interface no matter which datacenter the user connects to.

Multi-datacenter – Favorites/Subscriptions Replication

If you have different StoreFront clusters (server groups) in multiple datacenters, you probably want to replicate subscriptions between them. For more information, see What Subscriptions and Server Groups Mean for StoreFront Designs

  1. The store names must be identical in each StoreFront server group.
  2. When adding farms (Manage Delivery Controllers) to StoreFront, make sure the farm names are identical in each StoreFront cluster (server group).
  3. Load balance TCP 808 for each StoreFront cluster. Use the same VIP you created for SSL Load Balancing of StoreFront. Each datacenter has its own VIP.
  4. Run the PowerShell commands detailed at Configure subscription synchronization at Citrix Docs. When adding the remote cluster, enter the TCP 808 Load Balancing VIP (FQDN) in the other datacenter. Run these commands on both StoreFront clusters.
  5. Minesh at Subscriptions Replication same site different server group at Citrix Discussions says the following:
    1. FQDN to the Load Balanced VIP works, but IP does not.
    2. Manage Delivery Controllers > Edit > Display Name must be identical in both StoreFront Server Groups.
    3. The Reoccurring schedule command should be the following:
      Add-DSSubscriptionsSyncReoccuringSchedule -scheduleName scheduleOnSiteB -startTime 01:00:00 -repeatMinutes 30
  6. Don’t forget to add the StoreFront server computer accounts to the local group CitrixSubscriptionSyncUsers on each StoreFront server.

Share Favorites/Subscriptions with Multiple Stores

Docs.citrix.com – Configure two StoreFront stores to share a common subscription datastore: It is common for administrators to configure StoreFront with two distinct stores; one for external access to resources using Netscaler Gateway and another for internal access using the corporate LAN. You can configure both “external” and “internal” stores to share a common subscription datastore by making a simple change to the store web.config file.

For two stores to share a subscription datastore, you need only point one store to the subscription service end point of the other store. Note: The XenApp, XenDesktop and AppC controllers configured on each store must match exactly; otherwise, an inconsistent set of resource subscriptions on one store might occur. Sharing a datastore is supported only when the two stores reside on the same StoreFront server or server group deployment.

Open the external store web.config file (C:\Inetpub\wwwroot\Citrix\ExternalStore\web.config) using Notepad and search for the clientEndpoint. For example:

<subscriptionsStoreClient enabled="true">
<clientEndpoint uri="net.pipe://localhost/Citrix/Subscriptions/1__Citrix_External" authenticationMode="windows" transferMode="Streamed">
<clientCertificate thumbprint="0" />
</clientEndpoint>
</subscriptionsStoreClient>

Change the external to match the internal store endpoint. Then Propagate Changes.

<subscriptionsStoreClient enabled="true">
<clientEndpoint uri="net.pipe://localhost/Citrix/Subscriptions/1__Citrix_Internal" authenticationMode="windows" transferMode="Streamed">
<clientCertificate thumbprint="0" />
</clientEndpoint>
</subscriptionsStoreClient>

Delete Favorites/Subscriptions

You can delete subscriptions using the subscription store PowerShell API and some file editing:

  1. If StoreFront 3.5 or newer, run the following (from Citrix CTX216295 How to Export and Import StoreFront Subscription Database on Storefront 3.6):
    $store = Get-STFStoreService
    Export-STFStoreSubscriptions -Store $store -FilePath "$env:userprofile\desktop\subscriptions.txt"
    1. If StoreFront 3.0.1 or older, run the following PowerShell (using ‘Run As Administrator’ when opening the PowerShell Console and not missing the ‘. ‘ (i.e. dot space) at the start of the first command):
      . 'C:\Program Files\Citrix\Receiver StoreFront\Scripts\ImportModules.ps1'
      Export-DSStoreSubscriptions -StoreName MyStore -FilePath .\subscriptions.txt
  2. Stop the “Citrix Subscriptions Store” Service on all StoreFront servers in the deployment.
  3. Find the subscription store database folder: “C:\Windows\ServiceProfiles\NetworkService\AppData\Roaming\Citrix\SubscriptionsStore\1__Citrix_Store” on each StoreFront server. Delete the contents of this folder (do not delete the folder itself). Note: If UAC is enabled then you might have to go to C:\Windows\ServiceProfiles\NetworkService first and then drill down into the remaining folders. AppData is a hidden folder.
  4. Restart the “Citrix Subscriptions Store” Service on all StoreFront servers in the deployment. Open Event Viewer and, in the left pane, navigate to Applications and Services Logs > Citrix Delivery Services. Search for events logged by the Citrix Subscriptions Store Service with an Event ID of 3 and a Task Category of 2901. Ensure that an entry is logged for each store on every server in the deployment before continuing.
  5. Backup subscriptions.txt, then edit to remove any entries you want to delete.
  6. If StoreFront 3.5 or newer, run the following PowerShell commands to restore your subscriptions:
    $store = Get-STFStoreService
    Import-STFStoreSubscriptions -Store $store -FilePath "$env:userprofile\desktop\subscriptions.txt"
    1. If StoreFront 3.0.1 or older, run the following PowerShell:
      Import-DSStoreSubscriptions -StoreName MyStore -FilePath .\subscriptions.txt

Each row of the exported subscriptions file is a tab-separated list of user-sid, resource-id, subscription-id, subscription-status followed by zero or more subscription-property name-value pairs.

To delete all subscriptions for a particular user, you will need to find the user’s SID and then delete all rows starting with that value.

52 thoughts on “StoreFront Favorites/Subscriptions”

  1. Hi Carl – thanks for a great article. I have this scenario – exporting subscriptions from SF 3.12 and importing into SF 1912.0.7000.

    Import and export goes well, but the users are not getting their favorites from 3.12 on the new 1912 SF site.

    The names of the Delivery Controllers are identical and in lower case. The only difference is the “Type” in the Manage Delivery Controllers. In 3.12 it’s called XenDesktop and in 1912 it’s called Citrix Virtual Apps and Desktops. Will that be the reason do you think why the favorites are not migrated?

    1. Try creating a new subscription, export the subscriptions, and then compare the old with the new.

  2. Hi Carl,

    Thanks for the great article. If the destination server has already had an import, and another import needs to be done, will it handle any duplicate entries correctly or should the destination be purged first before importing again? Thanks.

    1. I think it merges, but you might have to test it. Subscription sync probably uses the same mechanism and it’s a merge.

  3. We are rebuilding our Citrix environment from server 2016 – CVAD 1912 to server 2019 – CVAD 2103. Is there a way to export subs and modify the file so that it points to the apps on the new DCs, configured with the same name? It looks like its not as simple as changing the DC group name as there is also a hash following the app.

    Example:

    S-1-5-21-1292428093-1454471165-1801674531-111759 XenDesktop Controllers.Microsoft Edge 87EA4709A296A057806ADBDD067188AD subscribed dazzle:position 3 position 3

    S-1-5-21-1292428093-1454471165-1801674531-111759 CVAD.Microsoft Edge B96549B81E242FB8482388C55E2E9834 subscribed dazzle:position i position h

  4. Hello,
    we recently upgraded from SF 7.15 LTSR to SF 1912 LTSR. Since then, users can not rearrange (via Mouse Drag) the Favorite icons in Receiver for Web anymore. Is this normal (change in Product) or a we facing an error?

    1. Hi Carl, I have an interesting question. I have a client who wants the storefront subscription store off the C drive and on a much larger drive, how can I tell storefront to put all future data in the new location? thanks Carl. I’m a huge fan…Carlos

  5. I’ve been testing this a bit and found something interesting/annoying.

    First, thanks for a great post Carl, this is very helpful in setting up, well anything you cover.

    Second, I’m setting up sync between four nodes. That may be pushing this simple file sync to begin with, but we have 4 datacenters, so I’m trying for it anyways. It’s all SF 1912, by the way.
    They’re pulling data from all peers at 30 minutes interval, staggered so no two server groups pull data at the same time. So far so good.

    Now testing – adding a favourite on a storefront, before or after the pull, seems to be ok. That is, as the other groups pull data, synchonised around. I.e. Added favourite isn’t overwritten by pulled data.

    Removing a favourite however, presents a problem, at least in my testing.
    If I remove a favourite in the interval BEFORE the storefront server I’m on has pulled from the peers but they’ve pulled from it, it strongly looks like the ‘deleted’ record is replaced in the database with data from the other server groups when the pull happens.

    I’m happy that adding favourites isn’t dependant on when in the cycle the user does it, but it’s strange that removing isn’t as reliant.

    I can’t find documentation on how exactly the databases sync deleted data, so maybe you or another reader might have some different experiences or insight with this.

    Cheers!

    1. Yes the subscription data is completely independent of StoreFront versions from 2.0 onwards. it is stored in a Windows eSent database which is very simple.

      Delivery Controller names MUST be identical and are case sensitive.

  6. is there any benefit of subscription data? If you are only presenting desktops and you want your few apps to be mandatory?

      1. Thanks I have this but worried if Im losing out on any benefits or best practice recommendations?

        I prefer mandatory and not give user an option on whats a favorite as i am only delivering what resources they need. so unsure what subscriptions are for?

        1. Subscriptions = Favorites. Favorites = Subscriptions. If you don’t want Favorites, then disable Subscriptions.

  7. Is there an API to add something to someones favorites automatically? We are migrating from 6.5 to 7.15 and I want to default favorites for my folks and keywords won’t work (scoping and AD groups – the delivery of hte app is a superset of the folks I want to favorite). Can I add to the file manually through a script? I just don’t want 4000 people to have to re-add all of their icons.

    This gives me some hope that I won’t have to have a major effort to touch all my users.

    1. You should be able to export the subscriptions to a file, edit the file, and then import it. Would that work?

      1. That’s what I”m thinking, but I’d need to find out the user id’s and application id’s. Going to try it out and post it if it works.

    2. You can tag resources with the KEYWORDS:Auto keyword to make it automatically subscribed. You can also use KEYWORDS:Mandatory but users will not be able to unsubscribe the resource.

  8. Hey Carl, got a question about if it is possible to sync subscriptions between different storefront versions? We are working on a rebuild of our environment, but we have remote sites in GSLB that will be changing soon, and we want to avoid duplicating work. We are currently on 3.7. and our main datacenter will be going to 3.14. Can we sync subscriptions between those different server groups for a short term, or will that cause issues in mixing versions?

    1. I cant think of any technical reason this would NOT work as you hope. I personally havent tested it but doubt there would be any issues if it is done correctly. You need to ensure that the Store names and Delivery Controller names exactly match. They are case sensitive

    2. Provided the Store name and Delivery Controller names match I believe this should work. I personally haven’t tested different versions but it should work.

  9. Hi Carl, Thank you so much for all the great work.. is there a way to change the icon order in storefront to be alphabetical all the time? i cannot find an article anywhere abou tit..

    1. Users can drag icons in any order they please. I assume automatic alphabetizing would disable user re-ordering.

  10. We have two DCs and both have a Server Group. These are setup with GSLB Active / Active load balancing. Can I have the sync go both ways? running this command on both sides each pointing to the LB VIP in each DC?

    Add-DSSubscriptionsRemoteSyncStore -clusterName deploymentname -storeName storename

    1. Yes, that’s how I normally do it. The docs say to schedule the commands so they don’t occur at the same time.

  11. I have a question on Subscriptions, I have 3 sites all sharing the same subsrciption data as per your article – that works fine. my issue now is that I find subscriptions from the browser site are not synchronised to the citrix reciever PNAgent site? Have I missed something obvious here?

    I have had great success configuring SF with the help from your site – Thanks 🙂

    1. I should add – it works in the other direction! adding to favorites within the receiver window seems to throw an error stating that “Cannot Add App” but it still does add the app! and when i look in a browser at the site i can see they have synced up….
      Using latest receiver 4.6 and SF 3.8

    2. PNAgent? Why not native Receiver Self-Service? I think PNAgent subscriptions are only stored locally, whereas native Receiver is stored on StoreFront.

      1. Sorry yes – native receiver self-service subscriptions not PNAgent….. wierd thing is it kind of works in one direction – i.e. a subcritption in native receiver flows through to a browser session opening the storeweb site… but not in the other direction 🙁

        1. Resolved! Seems it is yet another issue with receiver 4.6. Switched to 4.4 LTSR version and subscriptions work perfectly . 🙂

    1. Which names? You can export the subscriptions to a .csv file, edit the file with the new names, and then import to the other StoreFront servers.

      1. Thanks I just did a rename when I looked inside the export.
        The new 3.5 is barking at me that the command is obsolete and to use Import-STFStoreSubscriptions but I have seen little documentation about it. I’m going to assume there is also an Export-STFStoreSubscriptions.
        For now the DSStoreSubscriptions commands seem to work.

  12. Nicely put together. Carl, may I ask you for advice? We have two server groups on a replication schedule of our subscriptions. I followed Citrix docs on configuration. DCs exactly the same and characters. Server group 1 connects to server group 2 and downloads all delta changes perfectly fine. But when people change subscriptions on server group 1, server group 2 seems to never download the updates to subscriptions. I setup the sync on both server groups and event viewer shows it is working on both. Store name is the same, machine accounts added. Any ideas? Puzzled on this one. Storefront 3.5.

  13. Carl thanks for all of your articles they are very insightful. I wanted to bring to your attention the location of the Store database as I didn’t find it as you presented in your article. Instead it was located here C:\Windows\ServiceProfiles\NetworkService\AppData\Roaming\Citrix\SubscriptionsStore for StoreFront 2.6 where the service for the Citrix Subscription Store service runs as is the NetworkService account. The link to the Citrix discussion you reference does have the proper path down at the end of the string.

    1. Thanks Chris for catching that. I updated the text with the correct location. One of my goals with posting instructions publicly is for the community to find errors in my procedures.

  14. Thanks for the great article! Is there a way to selectively display the “Favourites” tab if the user have indeed some subscriptions enabled, and display the Apps tab if it’s not the case?

    setting the uiViews defaultView attribute to “auto” in web.config seems to just display the Favourites tabs by default, even if the user have no application in it.

    My first approach to this was to try and solve this issue with javascript, but there should be a way to let Citrix determine that, right?

    Thanks!

    Regards,

    Dennis

    1. Modify the C:\inetpub\wwwroot\Citrix\Web\custom\script.js file

      if (CTXS.Store.getMyApps().length == 0) {
      Onglet = “store” // ‘store’ or ‘desktops’
      CTXS.ExtensionAPI.changeView(Onglet);
      }

    1. Carl,

      Thanks for putting all the details of the storefront subscriptions together which is very helpful. I have a quick question regarding the same topic.

      Does the Storefront subscription store reside on a local file-based database replicated among the members of a storefront server group or a designated storefront server within a server group?

      1. Each server in the group has a local copy of the database. There is no central database.

Leave a Reply

Your email address will not be published. Required fields are marked *