2009-10-13 9 views
1

J'étudie la possibilité de déployer des services WCF vers une batterie SharePoint/WebApplication/Site/Web via une fonctionnalité SharePoint sans utiliser la classe SPWebConfigModification ou sans modifier manuellement web.config. Le Gille virtual path fix a déjà été appliqué, cela ne tient pas compte de cela. Le plus loin que je suis en mesure d'obtenir à ce jour est la création d'une classe ServiceHostFactory personnalisée que je fais référence dans le fichier .svc comme ceci:Déployer des services WCF dans SharePoint sans modifier Web.Config?

<%@ ServiceHost Language="C#" Debug="true" Service="Company.Namespace.ServiceClass" Factory="Company.Namespace.CustomServiceHostFactory" %> 
<%@ Assembly Name="Company.WCFCustomLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=0000000000000000" %> 

Je remplaçant ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses) dans mon service personnalisé usine d'accueil et l'application la diverse configuration de liaison/endpoint à l'intérieur. Mais le problème que je rencontre est que la méthode n'est même pas appelée lorsque j'interroge le fichier .svc dans mon navigateur web. J'avais l'impression que IIS va essayer de créer un ServiceHost en utilisant le ServiceHostFactory que j'ai spécifié dès que j'appelle le .svc dans mon navigateur web. Est-ce que je me trompe totalement? Est-ce que quelqu'un a déjà essayé de faire quelque chose comme ça avant? Si oui, y a-t-il quelque chose qui me manque? Est-il possible de configurer le ServiceHost complètement par programme ou dois-je encore jouer avec les balises <system.serviceModel> dans web.config?

+0

Qu'est-ce que * * vous obtenez lorsque vous interrogez le fichier '.svc' dans votre navigateur Web? –

+0

Je reçois une page HTML vierge. Puis, quand j'appuie sur rafraîchir, il est écrit "Service non disponible". –

+0

Ok, donc il semble que IIS se ferme comme par magie, ce qui explique pourquoi je recevais le message "Service Unavailable". Ma méthode CreateServiceHost est actuellement appelée, mais je reçois toujours une page html vide lorsque je navigue vers http: //server/_vti_bin/myservice.svc, ce qui signifie que je ne configure toujours pas correctement tous les liens/points de terminaison par programmation . Le livre de Juval ne me manque pas maintenant! –

Répondre

0

Probablement pas la réponse que vous cherchez, mais je suis allé dans un peu de détail sur la façon d'avoir une capacité de type WCF dans SharePoint sur le wiki de la profondeur SharePoint here. Je vais dans les détails sur l'utilisation d'un HttpHandler à la place de WCF, mais j'ai aussi quelques liens pour le WCF complet dans SharePoint.

Dans l'approche HttpHandler, vous n'avez pas besoin de modifier le fichier web.config racine, mais vous devez ajouter un fichier web.config dans votre propre dossier.

J'espère que cela donne un aperçu.

+0

Merci pour le lien, mais je vais actuellement pour la capacité WCF à part entière dans SP. Ce qui en ce moment n'est pas une entreprise facile. Pourquoi oh pourquoi SP doit-il tout transformer en une cheville carrée? –

2

Vous pouvez faire ce que vous voulez, et obtenir WCF lire la configuration où jamais vous le souhaitez. Je l'ai construit une fois pour permettre à chaque service WCF de lire son propre fichier de configuration. Bon pour les tests et le déploiement indépendant. La technique consiste à remplacer la méthode ServiceHost.ApplyConfiguration.

This blog post a quelques détails supplémentaires et le code source complet. Une autre approche d'intérêt général pourrait être de laisser le service WCF lire sa config à partir d'un magasin centralisé quelque part - une base de données, un serveur de fichiers distant, etc. Vous pouvez utiliser le même CustomServiceHost de base, et modifier simplement une méthode pour charger à partir d'une base de données, ou autre. Ps: la raison pour laquelle IIS est en train de disparaître est, je le soupçonne, que vous avez une exception dans le ServiceHost de WCF.

+0

Ce qui précède * peut fonctionner si je crée un fichier de configuration personnalisé et le déploie dans le dossier de la fonctionnalité, mais idéalement, je voudrais éviter les fichiers de configuration. –

+0

C'est pourquoi j'ai dit, vous pouvez utiliser la même idée et obtenir votre configuration de n'importe où. – Cheeso

Questions connexes