2010-03-16 2 views
0

J'ai développé un service Web SharePoint personnalisé et l'ai déployé dans /_vti_bin/myservice.asmx. En tant qu'utilisateur "régulier", la navigation vers cette URL ASMX fonctionne correctement. Lorsque j'essaie de naviguer vers "/_vti_bin/myservice.asmx/js" comme requis pour appeler ce service à partir d'ASP.Net AJAX, je reçois un 403. Si je navigue vers ce dernier, il n'y a pas moins d'un administrateur de ferme (admin de collection de sites) ne fonctionne pas), je reçois un 403. Il est tout à fait possible que le rôle de l'administrateur de la ferme en tant qu'administrateur de serveur local lui permette également de fonctionner.L'appel d'un service Web SharePoint personnalisé à partir d'ASP.Net AJAX génère une erreur 403?

C'est ma classe de service Web:

[WebService(Namespace = "http://sharepointservices.genericnamespace.com/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[System.ComponentModel.ToolboxItem(false)] 
[System.Web.Script.Services.ScriptService] 
public class ApprovalSvc : System.Web.Services.WebService 
{ 
    [WebMethod] 
    [ScriptMethod(ResponseFormat = ResponseFormat.Xml)] 
    public XmlDocument GetInboxItems(string inboxName, string s_Id) 
    { 
     // code removed 
    } 
} 

C'est l'art de mon code partiel web où je suis brancher le truc ASP.Net AJAX:

ScriptManager scriptMgr = new ScriptManager(); 
string webUrl = SPContext.Current.Web.Url; 
ServiceReference srvRef = new ServiceReference(webUrl + "/_vti_bin/ApprovalSvc.asmx"); 
scriptMgr.Services.Add(srvRef); 
this.Controls.Add(scriptMgr); 

Si je suis connecté en tant qu'administrateur de batterie/serveur, cela fonctionne. Sinon, non. L'assembly de service Web figure dans le GAC & répertorié dans SafeControls. Des idées?

Répondre

0

Bon vieux moniteur de processus à la rescousse.

Les faits:

  • Le code de service DLL est dans le répertoire bin de l'application Web, car il ne peut pas être signé b/c il fait référence non signés. DLL
  • La demande de la DLL de service provient de ASP.Net & pas SharePoint, en particulier un HttpModule dans l'assembly System.Web.Extensions.

La solution:

Parce que la demande ne passe pas par SharePoint et l'usurpation d'identité d'identité est également activée par défaut, les autorisations NTLM par défaut sur le répertoire BIN de l'application web ne sont pas assez bon - de l'utilisateur Compte n'a pas accès au répertoire BIN ou les DLL à l'intérieur.

Nous avons donné l'accès NT AUTHORITY \ Authenticated Users Read (pas Read & Exécuter, pas List Contents, seulement Read) dans le dossier, et tout va bien.

Questions connexes