Подтвердить что ты не робот

WCF не работает под IIS 6.0

Попытка заставить мою службу WCF работать под IIS 6.

Я создал сопоставление .svc и aspnet_isapi.dll в соответствии с: http://msdn.microsoft.com/en-us/library/ms752241.aspx

При просмотре страницы Server1.svc я получаю 404.

Я тестировал сайт с простой страницей .aspx, чтобы убедиться, что URL-адрес работает, но снова расширение .svc не является.

У меня установлен .NET 3.5 SP1, мой web.config ссылается на 3.5 сборки, и я не получаю сообщение об ошибке при просмотре страницы .aspx, поэтому, по-видимому, они собирают эти сборки.

Что может быть неправильным?

4b9b3361

Ответ 1

Скорее всего расширение .svc не регистрируется в IIS как обрабатывается ASP.NET(WCF).

Попробуйте выполнить эти два шага (замените Framework Framework64, если это необходимо):

Перейдите к:

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

а затем запустите:

aspnet_regiis -i

Перейдите по ссылке:   C:\Windows\Microsoft.NET\Framework\v3.0\Windows Communication Foundation

а затем запустите:

ServiceModelReg.exe -i

Ответ 2

В разделе Internet Information Service (IIS) Manager откройте node, называемый Web Service Extension. Убедитесь, что для параметра ASP.NET v2.0.5.0727 установлено значение "Разрешено". Я часами искал разные настройки и обнаружил, что для него установлено Запрещено. Просто нажмите кнопку "Разрешить", чтобы включить ASP.NET.

Ответ 3

Я могу думать о двух вещах:

Расширение .svc неправильно настроено (наименее вероятное в соответствии с вашим описанием). Вы можете проверить это сообщение для получения более подробной информации.

Или ваш веб-сайт имеет несколько заголовков хостов. Чтобы решить эту проблему, у вас должен быть один заголовок узла или использовать factory. Вот пример:

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());
        }
    }
}

Затем вам нужно установить factory в разметке вашего файла .svc:

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

Ответ 4

У меня была та же проблема. Это закончилось тем, что я запускал 64-разрядную версию Windows 2003 Server, и мои сборки были настроены для "Any CPU". Как только я сменил сборки на x86 и загрузил их на сервер, все сработало.

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

Просто выбросьте это на всякий случай, если у кого-то будет такая же проблема.

Ответ 5

У меня была такая же проблема и она была решена, разрешив расширения ISAPI. В разделе Диспетчер служб IIS откройте node вызванное расширение веб-службы. Убедитесь, что для параметра "Все неизвестные расширения ISAPI" установлено значение "Разрешено".

Ответ 6

Я сражался часами с этим, пока я, наконец, не использовал этот пример, и он работал сначала: http://www.codeproject.com/Articles/105273/Create-RESTful-WCF-Service-API-Step-By-Step-Guide

Я знаю, что ссылки только ответы не очень хорошие, а другие использовали эту ссылку CP для fooobar.com/info/266127/..., вот основные шаги, если статья всегда снижается:

ШАГ 1

Прежде всего запустите Visual Studio 2010. Нажмите FILE- > NEW- > PROJECT. Создайте новое "приложение службы WCF".

ШАГ 2

Как только вы создаете проект, вы можете увидеть в своем решении, что по умолчанию для сервиса WCF и файла интерфейса уже созданы (Service1.cs и IService.cs). Удалите эти два файла, и мы создадим наш собственный интерфейс и файл службы WCF.

ШАГ 3

Теперь щелкните правой кнопкой мыши по решению и создайте один новый файл службы WCF. Я дал имя файлу службы как "RestServiceImpl.svc".

ШАГ 4

Как я уже говорил в начале статьи, мы будем писать API, который может возвращать данные в формате XML и JSON, вот для этого интерфейс. В IRestServiceImpl добавьте следующий код

В приведенном выше коде вы можете увидеть два разных метода IRestService, которые являются XMLData и JSONData. XMLData возвращает результат в XML, тогда как JSONData в 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);
}

ШАГ 5

Откройте файл RestServiceImpl.svc.cs и напишите следующий код:

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

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

ШАГ 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>

ШАГ 7

В IIS:

введите описание изображения здесь