Возникла проблема с вызовом веб-сервиса из студии. Возвращает ошибку 404. Пример сервиса:
namespace Terrasoft.Configuration
{
using System;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.ServiceModel.Activation;
using Terrasoft.Core.DB;
using Terrasoft.Web.Common;
[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
public class UpsertContactService : BaseService
{
[OperationContract]
[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped,
ResponseFormat = WebMessageFormat.Json)]
public string GetTransformValue(string inputParam)
{
// Изменение значения входящего параметра.
var result = inputParam + " changed!";
return result;
}
}
}Пример вызова:
HttpWebResponse authresponse = (HttpWebResponse)authRequest.GetResponse();
var myRequest = HttpWebRequest.Create("https://мой сайт/0/ServiceModel/UpsertContactService.svc/GetTransformValue") as HttpWebRequest;
myRequest.Method = "POST";
myRequest.ContentType = "application/json";
foreach (Cookie Cook in authresponse.Cookies)
{
myRequest.Headers.Add(Cook.Name, Cook.Value);
}
myRequest.CookieContainer = bpmCookieContainer;
using (var requestStream = myRequest.GetRequestStream())
{
using (var writer = new StreamWriter(requestStream))
{
writer.Write(@"111");
}
}
using (HttpWebResponse response = (HttpWebResponse)myRequest.GetResponse())
{
using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.ASCII))
{
string s = reader.ReadToEnd();
Console.WriteLine(s);
}
}Авторизация проходит успешно, БП получилось запустить. Как запустить сервис и получить от него ответ?
Нравится
Добрый день
Виталий, в статье на академии есть ответ https://academy.terrasoft.ru/docs/developer/back-end_development/config…
Ответ 404 верный, т.к. у вас нет такого сервиса. Вы создаете конфигурационный сервис, который вызывается по другому url.


А зачем в Header добавлять значения всех кук из аутентификации? Достаточно только BPMCSRF.
Во-вторых. Вызов под каким пользователем происходит? под портальным? Если да, то надо сервис добавить в список разрешенных для портальных - \папка приложения\Terrasoft.WebApp\SspServices\SspServiceList.txt
Добавить комментарий
Алексей Следь,
происходит под админом, сайт в облаке, через постмен тоже 404.
Вот что в браузере пишет:

Добрый день
Виталий, в статье на академии есть ответ https://academy.terrasoft.ru/docs/developer/back-end_development/config…
Ответ 404 верный, т.к. у вас нет такого сервиса. Вы создаете конфигурационный сервис, который вызывается по другому url.


Артем Гура,
Да! То что нужно! Вот рабочий код:
HttpWebResponse authresponse = (HttpWebResponse)authRequest.GetResponse();
var myRequest = HttpWebRequest.Create("https://mysite.com/0/rest/UpsertContactService/GetTransformValue") as HttpWebRequest;
myRequest.Method = "POST";
myRequest.ContentType = "application/json";
myRequest.Headers.Add(authresponse.Cookies["BPMCSRF"].Name, authresponse.Cookies["BPMCSRF"].Value);
myRequest.CookieContainer = bpmCookieContainer;
using (var requestStream = myRequest.GetRequestStream())
{
using (var writer = new StreamWriter(requestStream))
{
writer.Write(@"{""inputParam"":""Test!""}");
}
}
using (HttpWebResponse response = (HttpWebResponse)myRequest.GetResponse())
{
using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.ASCII))
{
string s = reader.ReadToEnd();
Console.WriteLine(s);
}
}И еще как авторизовался, может кому нужно будет:
var authRequest = HttpWebRequest.Create(@"https://mysite.com/ServiceModel/AuthService.svc/Login") as HttpWebRequest;
authRequest.Method = "POST";
authRequest.ContentType = "application/json";
var bpmCookieContainer = new CookieContainer();
authRequest.CookieContainer = bpmCookieContainer;
using (var requestStream = authRequest.GetRequestStream())
{
using (var writer = new StreamWriter(requestStream))
{
writer.Write(@"{
""UserName"":""Supervisor"",
""UserPassword"":""Supervisor"",
""SolutionName"":""TSBpm"",
""TimeZoneOffset"":-120,
""Language"":""Ru-ru""
}");
}
}