32 votes

La publication de métadonnées WCF pour ce service est actuellement désactivée + Erreur de type de contenu

Cette erreur de métadonnées est celle que j'obtiens lorsque je navigue vers le service dans un navigateur. Je ne le consomme pas avec un client

et Oui j'ai ajouté <serviceMetadata httpGetEnabled="True"/> et j'ai un point de terminaison mex défini.

mais ça ne marche toujours pas

J'ai donc créé un service de base à héberger sur IIS7. Nouvelle installation de Windows 7 et VS2010.

J'avais suivi les instructions de cette page à la lettre :

http://msdn.microsoft.com/en-us/library/ms733766.aspx

Je suis convaincu qu'il doit s'agir d'un problème de configuration de IIS7, mais je ne suis pas sûr. Voici la configuration de mon service :

EDIT :

J'ai essayé d'accéder au service avec svcutil et j'ai obtenu l'erreur suivante :

The remote server returned an error: (415) Cannot process the message because the content type 'application/soap+xml; charset=utf-8' was not the expected type 'text/xml; charset=utf-8'..

il est également dit : The HTML document does not contain Web service discovery information.

Je ne sais pas comment le résoudre, cependant..

.svc :

<%@ServiceHost language="C#" Debug="true" Service="DestructionServices.TacticalNukeSVC "%>

.cs (situé dans le dossier C:\Development\HostedDestructionServices\App_Code dossier) :

using System;
using System.ServiceModel;

namespace DestructionServices
{
    [ServiceContract]
    public interface INukeInterface
    {
        [OperationContract]
        string FireMissile();

        [OperationContract]
        string DirectFire(double x, double y, double z);

        [OperationContract]
        void EnterCoordinates(double x, double y, double z);
    }

    public class TacticalNukeSVC : INukeInterface
    {
        public string FireMissile()
        {
            return "Boom";
        }

        public void EnterCoordinates(double x, double y, double z)
        {
            //bah, who cares about coordinates..
        }

        public string DirectFire(double x, double y, double z)
        {
            return "Fired at: " + x + ", " + y + ", " + z;
        }
    }
}

Web.Config :

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.serviceModel>
    <services>
      <service name="DestructionServices.Destro" behaviorConfiguration="MetadataBehavior">
        <endpoint address="" binding="wsHttpBinding" contract="DestructionServices.INukeInterface" />
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="MetadataBehavior">
          <serviceDebug includeExceptionDetailInFaults="True" httpHelpPageEnabled="True" />
          <serviceMetadata httpGetEnabled="True"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

IIS

70voto

marc_s Points 321990

Votre code et votre configuration semblent corrects - à l'exception d'un petit point :

Dans votre <service> vous avez défini un nom qui ne semble pas correspondre à la classe qui implémente réellement votre service :

<service name="DestructionServices.Destro"  ......>
               ************************** 

mais votre classe l'est :

namespace DestructionServices
{
    .....
    public class TacticalNukeSVC : INukeInterface
    {

Ces noms doivent correspondre ! Le site name= de l'attribut <service> dans la configuration doit être exactement le nom de votre classe de service - entièrement qualifié, y compris l'espace de nom - donc dans votre cas ici, il devrait être :

<service name="DestructionServices.TacticalNukeSVC" ......>

2voto

HydTechie Points 27

Le WCF qui fonctionnait auparavant avec des paramètres agréables a cessé de fonctionner et montre - error- Metadata publishing for this service is currently disabled.

BIEN que les paramètres de MEX soient parfaits, toujours WCF montre l'erreur ci-dessus, la raison : Le répertoire virtuel créé à partir de VS IDE N'EST PAS créé, bien qu'il donne un message de "succès"

Il suffit de créer manuellement un répertoire virtuel dans IIS, l'erreur Bingo est résolue.

J'espère que cela vous aidera !

0voto

evilkos Points 377

J'ai eu un autre problème. J'ai une application IIS asmx, et à l'intérieur j'ai placé un sous-dossier avec svc. Je l'ai configuré correctement, mais il ne m'a pas donné les métadonnées jusqu'à ce que je trouve ceci dans web.config en parent répertoire :

<system.web>
  <webServices>
    <soapExtensionTypes>
      <add type="SPFWebService.SPFWebServiceExtension,App_Code" priority="1" group="0" />
    </soapExtensionTypes>
  </webServices>
</system.web>

Je l'ai corrigé en plaçant mon nouveau service dans un répertoire séparé.

0voto

Si vous avez une classe sans constructeur par défaut et avec d'autres constructeurs, alors ajoutez un constructeur par défaut vide. J'ai eu le même problème et je l'ai résolu de cette façon.

0voto

nrpadilla2 Points 11

J'ai eu un problème similaire. Pour tous ceux qui pourraient rencontrer ce problème plus tard. Mon problème était que mon interface de service n'avait pas l'annotation DataAnnotation [ServiceContract].

[ServiceContract] //<--This was missing
public interface IServiceInterface
{
    [OperationContract]
    void Foo(Bar bar)
    //...
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X