Публикация метаданных WCF для этой службы в настоящее время отключена + Ошибка типа контента
Эта ошибка метаданных - это то, что я получаю, когда просматриваю службу в браузере. Я не ем его с клиентом
и Да.. Я добавил <serviceMetadata httpGetEnabled="True"/>
, и у меня определен конечный пункт mex
но он все равно не сработает.
Итак, я создал службу barebone для размещения на IIS7. Свежая установка Windows 7 и VS2010.
Я выполнил инструкции этой страницы к письму:
http://msdn.microsoft.com/en-us/library/ms733766.aspx
Я убежден, что это должен быть какой-то вопрос конфигурации с IIS7, но не уверен. Здесь моя настройка сервиса:
EDIT:
Я попытался обратиться к службе с помощью 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]()
Ответы
Ответ 1
Ваш код и конфигурация кажутся прекрасными - за исключением одной маленькой точки:
В тэге <service>
вы определили имя, которое, похоже, не соответствует классу, который фактически реализует вашу службу:
<service name="DestructionServices.Destro" ......>
**************************
но ваш класс:
namespace DestructionServices
{
.....
public class TacticalNukeSVC : INukeInterface
{
Эти имена должны совпадать! Атрибут name=
в теге <service>
в конфигурации должен быть точно, что ваш класс обслуживания вызывается - полностью квалифицирован, включая пространство имен, поэтому в данном случае это должно быть:
<service name="DestructionServices.TacticalNukeSVC" ......>
Ответ 2
Ранее работающий WCF с хорошими настройками переставал работать и показывался - error - публикация метаданных для этой службы в настоящее время отключена.
THOUGH MEX Настройки идеальны, но WCF показывает выше ошибки, причина: виртуальный каталог, созданный из VS IDE, не создан, хотя он дает сообщение об успешном завершении.
Просто создайте виртуальный каталог в IIS вручную, ошибка Bingo решена.
Надеюсь, это поможет!
Ответ 3
Обнаружена аналогичная проблема. У меня было неправильное пространство имен в моем теге сервиса в 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.
(Спасибо Марку)
Ответ 4
У меня была другая проблема. У меня есть приложение asmx IIS, и внутри я разместил подпапку с svc. Настроил его правильно, но он не дал мне метаданные, пока я не нашел это в web.config в каталоге parent:
<system.web>
<webServices>
<soapExtensionTypes>
<add type="SPFWebService.SPFWebServiceExtension,App_Code" priority="1" group="0" />
</soapExtensionTypes>
</webServices>
</system.web>
Исправлено, удалив мою новую службу в отдельный каталог.
Ответ 5
если у вас есть класс, не имеющий конструктора по умолчанию, другие конструкторы, затем добавьте пустой конструктор по умолчанию, у меня была та же проблема, и я решил это сделать.
Ответ 6
У меня была аналогичная проблема. Для тех, кто может столкнуться с этим позже. Моя проблема заключалась в том, что в моем сервисном интерфейсе не было параметра [ServiceContract] DataAnnotation
[ServiceContract] //<--This was missing
public interface IServiceInterface
{
[OperationContract]
void Foo(Bar bar)
//...
}