Have you tried to open context as an user which profile do you want to retrieve?
SPUser user = web.EnsureUser(@"domain\name");
SPUserToken token = user.UserToken;
using (SPSite site = new SPSite(SPContext.Current.Site.ID, token ))
{
}
In this case try something like this
public class ContextSwitcher: IDisposable
{
private HttpContext _temp;
private SPSite _site;
private SPWeb _web;
public ContextSwitcher(string url, string username)
{
SPUser user = web.EnsureUser(username);
SPUserToken token = user.UserToken;
_site = new SPSite(url, token);
_web = _site.OpenWeb();
_temp = HttpContext.Current;
HttpRequest request = new HttpRequest("", _web.Url, "");
request.Browser = new HttpBrowserCapabilities();
HttpContext.Current = new HttpContext(request, new HttpResponse(new StringWriter()));
HttpContext.Current.Items["HttpHandlerSPWeb"] = _web;
}
public void Dispose()
{
HttpContext.Current = _temp;
if (_web != null) _web.Dispose();
if (_site != null) _site.Dispose();
}
}