Создание конфигурационного веб сервиса, ошибка NotFound (404) при запросе
Создал скрипт по примеру из документации, опубликовал, обновил все базы, скомпилировал. Сделал запрос в Postman на авторизацию - все успешно, получил куки. При запросе из Postman или строки браузера к моему скрипту выдает ошибку:
Ошибка HTTP 404.0 — Not Found
Запрошенный адрес:
http://localhost:82/0/rest/UsrCustomConfigurationService/GetContactIdBy…
Физический путь:
С:\inetpub\wwwroot\_SalesEnterprise_Softkey_MSSQL_ENU\Terrasoft.WebApp\rest\UsrCustomConfigurationService\GetContactIdByName
Очевидно, что путь запроса виртуальный, однако происходит поиск по физическому пути, где у меня нет папки rest, мой скрипт лежит совсем в другой месте. Как настроить выполнение скрипта? Может что-то нужно настроить в IIS (WCF)?
Текст скрипта:
namespace Terrasoft.Configuration.UsrCustomNamespace
{
using System;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.ServiceModel.Activation;
using Terrasoft.Core;
using Terrasoft.Web.Common;
using Terrasoft.Core.Entities;
[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
public class UsrCustomConfigurationService: BaseService
{
// Метод, возвращающий идентификатор контакта по его имени.
[OperationContract]
[WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped,
ResponseFormat = WebMessageFormat.Json)]
public string GetContactIdByName(string Name) {
// Результат по умолчанию.
var result = "";
// Экземпляр EntitySchemaQuery, обращающийся в таблицу Contact базы данных.
var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "Contact");
// Добавление колонок в запрос.
var colId = esq.AddColumn("Id");
var colName = esq.AddColumn("Name");
// Фильтрация данных запроса.
var esqFilter = esq.CreateFilterWithParameters(FilterComparisonType.Equal, "Name", Name);
esq.Filters.Add(esqFilter);
// Получение результата запроса.
var entities = esq.GetEntityCollection(UserConnection);
// Если данные получены.
if (entities.Count > 0)
{
// Возвратить значение колонки "Id" первой записи результата запроса.
result = entities[0].GetColumnValue(colId.Name).ToString();
// Также можно использовать такой вариант:
// result = entities[0].GetTypedColumnValue(colId.Name);
}
// Возвратить результат.
return result;
}
}
}
Нравится
Возможно, что-то неверно в заголовках запроса, который отправляете к серверу. Посмотрите в Fiddler все подробности этого запроса и заодно ответа.