Служба WCF с общим хостером вызывает 404 (помещено в приложение IIS)

Если я пытаюсь выполнить метод, используя jQuery или через браузер, я получаю 404. Моя конфигурация выглядит следующим образом:

<system.serviceModel>
    <behaviors>
        <serviceBehaviors>
            <behavior name="RegistrationBehavior">
                <serviceMetadata httpGetEnabled="true" />
                <serviceDebug includeExceptionDetailInFaults="true" />
            </behavior>
        </serviceBehaviors>
        <endpointBehaviors>
            <behavior name="RegistrationEndpointBehavior">
                <enableWebScript/>
            </behavior>
        </endpointBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
    <services>
        <service name="Corp.EmployeeService" behaviorConfiguration="RegistrationBehavior">
            <endpoint address="" binding="webHttpBinding" contract="Corp.IEmployeeService" behaviorConfiguration="RegistrationEndpointBehavior" />
        </service>
    </services>
</system.serviceModel>

Я полагаю, что это как-то связано с конфигурацией, так как мой метод украшен OperationContract и атрибутом WebInvoke.

Мой интерфейс (упрощенный для публикации) выглядит примерно так:

namespace Corp
{
    [ServiceContract]
    public interface IEmployeeService
    {
        [OperationContract]
        [WebInvoke(ResponseFormat = WebMessageFormat.Json, Method = "POST")]
        int Register(string username);
    }
}

На самом классе обслуживания я украсил его следующим атрибутом:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class EmployeeService : IEmployeeService

Как я уже говорил, я пытался запустить службу, используя http://localhost/EmployeeService.svc/Register или используя jQuery, например так:

$.ajax({
    cache: false,
    async: true,
    type: "POST",
    dataType: "json",
    url: "http://localhost/EmployeeService.svc/Register",
    data: '{"username":"test"}',
    contentType: "application/json;charset=utf-8",
    success: function (msg) {
        var status = msg.RegisterResult;
        if (status == 1) {
            alert('Success');
        } else {
            alert('Failure');
        }
    },
    error: function (msg) {
        alert('Exception - ' + msg);
    }
});

Оба возвращают 404.

Поскольку я предоставляю этот сервис совместно с компанией, предоставляющей общий хостинг, я создал свой сервис на ServiceFactory, как показано ниже:

public class IisServiceHostFactory : ServiceHostFactory
{
    protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
    {
        var newAddress = baseAddresses[0];

        if (!newAddress.AbsoluteUri.Contains("http://www."))
            newAddress = new Uri(newAddress.AbsoluteUri.Replace("http://", "http://www."));

        var webServiceHost = new IisServiceHost(serviceType, newAddress);
        return webServiceHost;
    }
}

public class IisServiceHost : ServiceHost
{
    public IisServiceHost(Type serviceType, params Uri[] baseAddresses): base(serviceType, baseAddresses) { }
}

POST происходит при попытке ударить его из jQuery. Ответ 404 (из другого примера сервиса, который был упрощен для тестирования) показан ниже:

404 Ответ от другой службы в том же проекте

Текст этого исключения: HTTP 404. Требуемый ресурс (или одна из его зависимостей) мог быть удален, изменилось его имя или временно недоступен. Пожалуйста, просмотрите следующий URL и убедитесь, что он написан правильно.

0 ответов

Другие вопросы по тегам