Публикация метаданных WCF для этой службы в настоящее время отключена + ошибка типа содержимого - PullRequest
32 голосов
/ 07 февраля 2011

Эта ошибка метаданных - это то, что я получаю, когда просматриваю службу в браузере.Я не использую его с клиентом

и Да .. Я добавил <serviceMetadata httpGetEnabled="True"/>, и у меня определена конечная точка mex

, но она все равно не будет работать ..

Итак, я создал базовый сервис для размещения на IIS7.Свежая установка Windows 7 и VS2010.

Я следовал инструкциям этой страницы к письму:

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

Я убежден, что это должно бытькакая-то проблема конфигурации с IIS7, но и не уверен.Вот мои настройки службы:

РЕДАКТИРОВАТЬ:

Я попытался получить доступ к службе с помощью svcutil и получил следующую ошибку:

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'..

также говорится: The HTML document does not contain Web service discovery information.

не уверен, как ее решить, однако ..

.svc файл:

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

.cs файл (находится в C: \ Development \ HostedDestructionServices \ папка App_Code):

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

Ответы [ 6 ]

70 голосов
/ 07 февраля 2011

Ваш код и конфигурация выглядят хорошо - за исключением одного маленького пункта:

В вашем теге <service> вы определили имя, которое, по-видимому, не соответствует классу, который фактически реализует ваш сервис:

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

но ваш класс:

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

Эти имена должны совпадать! Атрибут name= в теге <service> в конфигурации должен быть в точности так, как называется ваш класс обслуживания - полностью квалифицирован, включая пространство имен - поэтому в вашем случае здесь должно быть:

<service name="DestructionServices.TacticalNukeSVC" ......>
2 голосов
/ 31 июля 2014

Ранее работавший WCF с хорошими настройками ~ перестал работать и показывает - ошибка - публикация метаданных для этой службы в настоящее время отключена.

THOUGH MEX Настройки идеальны, но WCF все еще показывает вышеуказанную ошибку, причина: виртуальный каталог, созданный из VS IDE, НЕ СОЗДАН, хотя выдает сообщение «success».

Просто создайте виртуальный каталог в IIS вручную, ошибка бинго устранена.

Надеюсь, это поможет!

0 голосов
/ 01 мая 2016

У меня была похожая проблема.Для тех, кто может столкнуться с этим позже.Моя проблема заключалась в том, что мой сервисный интерфейс не имел аннотации данных [ServiceContract]

[ServiceContract] //<--This was missing
public interface IServiceInterface
{
    [OperationContract]
    void Foo(Bar bar)
    //...
}
0 голосов
/ 29 августа 2015

если у вас есть класс без конструктора по умолчанию и других конструкторов, а затем добавьте пустой конструктор по умолчанию, у меня возникла та же проблема, и я решил ее этим.

0 голосов
/ 03 марта 2015

У меня была другая проблема. У меня есть приложение IIS asmx, и внутри я поместил подпапку с svc. Настроил его правильно, но он не дал мне метаданные, пока я не нашел его в web.config в каталоге parent :

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

Исправлено, удалив мой новый сервис в отдельный каталог.

0 голосов
/ 23 июля 2013

Обнаружена похожая проблема. У меня было неправильное пространство имен в моем сервисном теге в web.config по сравнению с пространством имен для класса сервиса в файле svc.

web.config

< service name="X.Y.Z.ContentService" behaviorConfiguration="XServiceBehavior">

файл SVC

<%@ ServiceHost Language="C#" Debug="true" Service="X.Y.A.ContentService" %>

Как видно выше, служебный тег в web.config имел пространство имен X.Y.Z, где у файла svc X.Y.A.

(Спасибо Марку)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...