Создание конфигурационного веб сервиса, ошибка 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<string>(colId.Name); } // Возвратить результат. return result; } } }
Нравится
Возможно, что-то неверно в заголовках запроса, который отправляете к серверу. Посмотрите в Fiddler все подробности этого запроса и заодно ответа.