2009-01-16 9 views
19

Essayer d'obtenir mon service WCF en cours d'exécution sous IIS 6.WCF ne fonctionne pas sous IIS 6.0

J'ai créé la cartographie .svc et aspnet_isapi.dll selon: http://msdn.microsoft.com/en-us/library/ms752241.aspx

Lorsque vous affichez la page Server1.svc, je reçois un 404.

J'ai testé le site avec une simple page .aspx pour m'assurer que l'URL fonctionne, mais encore une fois l'extension .svc ne l'est pas. J'ai installé .NET 3.5 SP1, mon web.config fait référence à des assemblages 3.5, et je n'obtiens pas d'erreur lors de la visualisation d'une page .aspx, donc il sélectionne ces assemblages correctement, vraisemblablement.

Qu'est-ce qui pourrait ne pas fonctionner?

+1

Est-ce sur un orlocalhost serveur distant? Si vous êtes à distance, avez-vous vérifié que tout fonctionne d'abord localement? –

Répondre

6

Il y a deux choses que je peux penser:

L'extension .svc n'est pas correctement configuré (moins probable selon votre description). Vous pouvez vérifier cette post pour plus de détails.

Ou votre site Web contient plusieurs en-têtes d'hôte. Pour résoudre ce problème, vous devez avoir un seul en-tête d'hôte ou utiliser une fabrique. Voici un exemple:

namespace MyNamespace 
{ 
    public class MultipleHostServiceFactory : ServiceHostFactory 
    { 
     protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses) 
     { 
      List<Uri> addresses = new List<Uri>(); 
      addresses.Add(baseAddresses[0]); 
      return base.CreateServiceHost(serviceType, addresses.ToArray()); 
     } 
    } 
} 

Ensuite, vous devez définir l'usine dans le balisage de votre fichier .svc:

<%@ ServiceHost Language="C#" 
       Debug="false" 
       Factory="MyNamespace.MultipleHostServiceFactory" 
       Service="MyNamespace.MyService" 
       CodeBehind="MyService.svc.cs" %> 
+0

il n'y a pas d'en-têtes de l'hôte de ce que je peux voir, juste en utilisant l'adresse IP – Blankman

+1

Vous n'avez peut-être pas résolu le problème de l'OP, mais vous avez obtenu le mien! – RSolberg

20

Plus que probablement l'extension .svc n'est pas enregistré sous IIS comme étant traitées par ASP.NET (WCF).

Essayez ces 2 étapes (remplacer cadre avec Framework64 si elle est nécessaire):

Aller à:

C:\Windows\Microsoft.NET\Framework\v2.0.50727\ 

puis exécutez:

aspnet_regiis -i 

Aller à: C: \ Windows \ Microsoft.NET \ Framework \ v3.0 \ Windows Communication Foundation

puis exécutez:

ServiceModelReg.exe -i 
+0

Cela a fonctionné pour moi! Merci –

+0

C'était un épargnant de vie! Je n'ai eu qu'à lancer "aspnet_regiis" et ça l'a corrigé. –

+1

si vous exécutez -i wont que "casser" toutes les installations .net antérieures? tout notre site Web fonctionne .net 1 ... je dois faire fonctionner wcf. devrais-je courir avec -i flags? Je ne veux pas changer de choses existantes. – BabelFish

17

Sous Internet Information Service (IIS) Manager, ouvrez le nœud appelé Web Service Extension. Assurez-vous que ASP.NET v2.0.5.0727 est défini sur Autorisé. J'ai passé des heures à chercher différents paramètres et j'ai trouvé qu'il était réglé sur Interdit. Cliquez simplement sur le bouton Autoriser pour activer ASP.NET.

+0

Merci, vous venez de réparer mon déploiement! – stuartd

+0

@Stuart Dunkeld, vous êtes le bienvenu. Je suis content que cela ait aidé. –

+0

Cela peut aussi arriver avec ASP.NET v4 ... –

3

J'ai eu le même problème. Il s'est avéré que j'étais en cours d'exécution d'une version 64 bits de Windows 2003 Server et que mes assemblys étaient configurés pour "Any CPU". Une fois que j'ai changé les assemblées en x86 et que je les ai téléchargées sur le serveur, tout a fonctionné. Je ne sais pas pourquoi personne ne l'a mentionné nulle part ailleurs dans les 30 fils que j'ai lus, mais mon ami me l'a recommandé, et cela a fonctionné comme un charme. Il suffit de le jeter au cas où quelqu'un aurait le même problème.

0

J'ai eu le même problème et l'ai résolu en autorisant les extensions ISAPI. Sous Gestionnaire des services Internet (IIS), ouvrez le nœud appelé Extension du service Web. Assurez-vous que "Toutes les extensions ISAPI inconnues" est défini sur Autorisé.

0

Je me suis battu pendant des heures avec ce jusqu'à ce que j'utilisé cet exemple et ça a marché d'abord aller: http://www.codeproject.com/Articles/105273/Create-RESTful-WCF-Service-API-Step-By-Step-Guide

Je sais lien que les réponses ne sont pas bonnes et d'autres ont utilisé ce lien CP à solve this type of problem here at Stackoverflow si ici sont les étapes de base si l'article ne va jamais vers le bas:

ÉTAPE 1

tout d'abord lancer Visual studio 2010. Cliquez sur File-> New-> PROJET. Créer une nouvelle "application de service WCF".

ÉTAPE 2

Une fois que vous créez le projet, vous pouvez voir en solution que par le service par défaut WCF et le fichier d'interface sont déjà créés (Service1.cs & IService.cs). Supprimez ces deux fichiers et nous créerons notre propre interface et fichier de service WCF.

ÉTAPE 3

Maintenant, faites un clic droit sur la solution et de créer un nouveau fichier de service WCF. J'ai donné le nom au fichier de service en tant que "RestServiceImpl.svc".

ÉTAPE 4

Comme je l'ai expliqué au début de l'article que nous allons écrire une API qui peut renvoyer des données au format XML et JSON, voici l'interface pour cela. Dans IRestServiceImpl, ajoutez le code suivant

Dans le code ci-dessus, vous pouvez voir deux méthodes différentes de IRestService qui sont XMLData et JSONData. XMLData retourne XML alors que JSONData dans JSON.

[ServiceContract] 
public interface IRestServiceImpl 
{ 
    [OperationContract] 
    [WebInvoke(Method = "GET", 
     ResponseFormat = WebMessageFormat.Xml, 
     BodyStyle = WebMessageBodyStyle.Wrapped, 
     UriTemplate = "xml/{id}")] 
    string XMLData(string id); 

    [OperationContract] 
    [WebInvoke(Method = "GET", 
     ResponseFormat = WebMessageFormat.Json, 
     BodyStyle = WebMessageBodyStyle.Wrapped, 
     UriTemplate = "json/{id}")] 
    string JSONData(string id); 
} 

STEP 5

Ouvrez le fichier RestServiceImpl.svc.cs et écrire le code suivant là-bas:

public class RestServiceImpl : IRestServiceImpl 
{ 
    public string XMLData(string id) 
    { 
     return "You requested product " + id; 
    } 

    public string JSONData(string id) 
    { 
     return "You requested product " + id; 
    } 
} 

ÉTAPE 6

Web.Config

<?xml version="1.0"?> 
<configuration> 
    <system.web> 
    <compilation debug="true" targetFramework="4.0" /> 
    </system.web> 
    <system.serviceModel> 
    <services> 
     <service name="RestService.RestServiceImpl" behaviorConfiguration="ServiceBehaviour"> 
     <!-- Service Endpoints --> 
     <!-- Unless fully qualified, address is relative to base address supplied above --> 
     <endpoint address ="" binding="webHttpBinding" contract="RestService.IRestServiceImpl" behaviorConfiguration="web"> 
      <!-- 
       Upon deployment, the following identity element should be removed or replaced to reflect the 
       identity under which the deployed service runs. If removed, WCF will infer an appropriate identity 
       automatically. 
      --> 
     </endpoint> 
     </service> 
    </services> 

    <behaviors> 
     <serviceBehaviors> 
     <behavior name="ServiceBehaviour"> 
      <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment --> 
      <serviceMetadata httpGetEnabled="true"/> 
      <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> 
      <serviceDebug includeExceptionDetailInFaults="false"/> 
     </behavior> 
     </serviceBehaviors> 
     <endpointBehaviors> 
     <behavior name="web"> 
      <webHttp/> 
     </behavior> 
     </endpointBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
    </system.serviceModel> 
    <system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    </system.webServer> 
</configuration> 

ÉTAPE 7

Dans IIS:

enter image description here