URL-адрес Ajax для маршрутизации WCF в веб-формах Asp.Net 4

Я реализовал маршрутизацию в веб-приложении Asp.Net 4. С файлом aspx он работает нормально, но не работает с WCF.

У меня есть WCF, который вызывается из файла javascipt по запросу ajax.

Мой код WCF:

[ServiceContract(Namespace = "")]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public class Signature
    {

        /// <summary>
        /// Get signature info by email address.
        /// </summary>        
        [OperationContract]        
        [WebInvoke(ResponseFormat = WebMessageFormat.Json)]
        public string GetSignatureInfo(string email)
        {
            ...
        }
    }
}

Web.config:

<services>     
  <service name="WEB.Services.Signature">
    <endpoint address="" behaviorConfiguration="WEB.Services.SignatureAspNetAjaxBehavior"
      binding="webHttpBinding" contract="WEB.Services.Signature" />
  </service>
</services>

JavaScript:

var _data = {
    "email": self.email.val()
};

$.ajax({
    url: '../Signature'
    , type: 'POST'
    , dataType: 'json'
    , data: JSON.stringify(_data)
    , success: function (data) {
        console.log('success');
    }
    , error: function () {
        console.log('error');
    }
});

Глобальный.asax:

void RegisterRoutes(RouteCollection routes)
{
    var sr = new ServiceRoute("Signature", new WebServiceHostFactory(), typeof(Signature));
    sr.Url = "Services/Signature.svc/GetSignatureInfo";
    routes.Add(sr);
}


void Application_Start(object sender, EventArgs e)
{
    // Code that runs on application startup

    RegisterRoutes(RouteTable.Routes);            
}

Я получаю «NetworkError: 404 Not Found — _http://www.my-project.com/Signature». Где я ошибаюсь или какой должен быть URL-адрес ajax ?!!! Пожалуйста помоги. Заранее спасибо.


person Sasha.M    schedule 01.09.2013    source источник
comment
Похоже, вы нажали Опубликовать свой вопрос, не закончив его. Вы можете отредактировать вопрос, добавив код, который вы собирались добавить, а также свой вопрос.   -  person Burhan Ali    schedule 01.09.2013
comment
Извините, сейчас исправлено   -  person Sasha.M    schedule 01.09.2013
comment
Попробуйте полностью указать URL-адрес, который вы передаете в JavaScript, — вместо url: '../Signature' используйте url: 'http://somedomain/url: '../Signature'. Кроме того, ваш метод принимает параметр, поэтому вам, вероятно, также нужно передать его.   -  person Tim    schedule 02.09.2013


Ответы (1)


Мой коллега по работе нашел решение: проблема была в конфигурации IIS. Если мое приложение находится на сайте по умолчанию, я должен добавить URL-адрес ajax с префиксом проекта. Например, если моя служба находится в веб-проекте, я должен ввести URL-адрес, например: «/Web/Services/MyService/MyFunction» в файле js. Тот же URL-адрес должен быть в файле Global.asax в URL-адресе ServiceRoute, но без первого символа «/». В этом случае он будет работать локально, но будет проблема поставить его на рабочий сервер.

Оптимальное решение: 1. IIS: добавить сайт, настроить физический путь к нему, изменить его порт(!!!). 2. .js + Global.asax: просто удалите имя проекта из URL-адреса в обоих местах. Таким образом, URL-адрес будет выглядеть так: в файле js «/Services/MyService/MyFunction» и в Global.asax «Services/MyService/MyFunction» (без первого «/»)

Это все. Большое спасибо Мири (коллега).

person Sasha.M    schedule 03.09.2013