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, поэтому, по-видимому, они собирают эти сборки.
Что может быть неправильным?
Ответы
Ответ 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:
![введите описание изображения здесь]()