StoreFront Favorites/Subscriptions

Last Modified: Aug 14, 2017 @ 7:40 pm

Navigation

This page contains the following topics:

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 in the other datacenter. Run these commands on both StoreFront clusters.
  5. 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

From Citrix Discussions: 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.

21 thoughts on “StoreFront Favorites/Subscriptions”

  1. 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..

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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

Leave a Reply