Возникла проблема с вызовом веб-сервиса из студии. Возвращает ошибку 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"" }"); } }