Не получается вэб-сервис

Доброе утро, коллеги.

Есть вопрос.

Сделал тестовый вэб-сервис , по примеру из https://community.terrasoft.ru/forum/topic/9811 , но у меня что-то не сработал.
В логах результат:

При выполнении запроса возникла ошибка  статус ответа: 404 (Not Found) url запроса: [url]/0/rest/RegistrationService/TestServiceMethod метод: POST данные запроса: test data1

all-combined.js:462:345
.log() all-combined.js:462
.error() all-combined.js:462
.logResponseError() all-combined.js:722
.validateResponse() all-combined.js:723
.request/a.callback() all-combined.js:721
.callback() all-combined.js:1
.onComplete() all-combined.js:1
.onStateChange() all-combined.js:1
Ext.Function.bind/() all-combined.js:1

Код регистрационного сервиса:

namespace Terrasoft.Configuration.CommandLineService
{
  using System;
  using System.Collections.Generic;
  using System.Security;  
  using System.ServiceModel;
  using System.ServiceModel.Activation;
  using System.Web;
  using Newtonsoft.Json;
  using Terrasoft.Common;
  using Terrasoft.Web.Common;
  using Terrasoft.Configuration.RegistrationHelper;
  using Terrasoft.Core;
  using Terrasoft.Core.Configuration;
  using Terrasoft.Core.DB;
  using Terrasoft.Core.Scheduler;
  using System.CodeDom.Compiler;
  using System.ServiceModel;
  using System.ServiceModel.Web;
  using Terrasoft.Core.Entities;
  using Terrasoft.Core.Store;
  using System.Data;
  using System.Collections.Generic;

  #region Class: RegistrationService
 
  [ServiceContract]
  [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
  public class RegistrationService{

    [OperationContract]
    [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
    public string TestServiceMethod(string data) {
      var userConnection = (UserConnection)HttpContext.Current.Session["UserConnection"];
      string key = string.Format("ExportFilterKey_{0}", Guid.NewGuid());
      userConnection.SessionData[key] = data;
      return key;
    }
  }

  #endregion
}

код запроса к нему, на клиенте:

// тест
Terrasoft.AjaxProvider.request({
  url: Terrasoft.workspaceBaseUrl + "/rest/RegistrationService/TestServiceMethod",
  headers: {
    'Accept': 'application/json',
    'Content-Type': 'application/json'
  },
  method: 'POST',
    jsonData:  'test data',
    callback: function(request, success, response) {
    if (success) {
      console.log(response.responseText);
    }
  },
  scope: this
});

Нравится

2 комментария

Мой промах, забыл опубликовать. Сделал публикацию и получил теперь:

POST [url]/0/rest/RegistrationService/TestServiceMethod 400 (Bad Request)

Здравствуйте, Евгений!

Такая ситуация связана с тем, что по умолчанию веб-сервис требует авторизции. Можно реализовать ее в клиеннтском приложении или создать сервис, доступный без авторизации. Информацию о том, как это сделать добавляю во вложение.

Также обратите внимание, что в большинстве случаев для обмена данными с системой удобнее использовать не веб сервис, а протокол Odata.

Средства интеграции bpm'online достаточно подробно описаны в документации по разработке, раздел "Примеры решения типовых задач" - "Рекомендуемые средства интеграции".

Показать все комментарии