tags:

views:

26

answers:

1

I'm attempting to host a WCF service in SharePoint. I have configured the service to be compatible with ASP.NET to allow me access to HttpContext and session information

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
public class MISDataService : IMISDataService { ... }

And my configuration looks like this

<system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
    <services>
        <service name="MISDataService">
            <endpoint address="" binding="webHttpBinding" contract="MISDataViews.IMISDataService" />
        </service>
    </services>        
</system.serviceModel>

Whilst this gives me access to the current HTTP context, the serivce is always hosted under the root domain, i.e. http://www.mydomain.com/_layouts/MISDataService.svc.

In SharePoint the URL being accessed gives you specific context information about the current site via the SPContext class. So with the service hosted in a virtual directory, I would like it to be available on mulitple addresses e.g.

http://www.mydomain.com/_layouts/MISDataService.svc
http://www.mydomain.com/sites/site1/_layouts/MISDataService.svc
http://www.mydomain.com/sites/site2/_layouts/MISDataService.svc

so that the service can figure out what data to return based upon the current context.

Is it possible to configure the endpoint address dynamically? Or is the only alternative to host the service in one location and then pass the "context" to it some how?

A: 

Not a WCF specialist, but can't you specify the endpoint while connecting to the service?

KoenVosters
You can but whenever the service executes it seems to be under the root of the domain, i.e. if you request http://www.mydomain.com/sites/site1/_layouts/MISDataService.svc, the service actually executes under the context of http://www.mydomain.com/_layouts/MISDataService.svc. This might be SharePoint getting in the way but I don't think so...
Paul Bevis