wcforchardcmsorchard-modules

WCF Service In Orchard Module With Multi Tenancy


I have a WCF service that is defined in a module. When we try to call this service from a non-default tenant, the content manager always references our default tenants settings. In debugging, inside of OrchardServiceHostFactory, I notice that it ends up getting the settings for the default tenant because the base address that is passed into the CreateServiceHost method is always our default tenants uri.

Given that I am not wholly familiar with WCF, is there a configuration option that I am missing that is causing the WCF service to be created with the default tenants address, instead of the non-default tenant?

Relevant code:

private static readonly Route _SITEMAP_SERVICE_ROUTE = new ServiceRoute("api/SitemapService", new OrchardServiceHostFactory(), typeof(ISitemapService))
{
    DataTokens = new RouteValueDictionary
    {
        {
            "area", "Project.Localization"
        }
    }
};

public interface ISitemapService : IOrchardSitemapService, IDependency
{
}

[ServiceContract]
public interface IOrchardSitemapService
{
    [OperationContract]
    int GetNavigableContentCount();

    [OperationContract]
    List<SitemapEntry> GetNavigableContent();
}

Solution

  • I was able to fix this by adding an additional site to IIS that pointed to the same file system location, and used the same application pool. This new site then references the non-default's tenant, and the service will now be created with the correct base address.