Что-то кодировка сломалась. Вот, что там:
[code]
Здравствуйте, вот инструкция по написанию сервиса, вызывающего БП, доступного по HTTP\GET с передачей параметров в БП:
1. Вносим правки в наш «UsrLaunchProccService», во-первых, добавим Usr, как в имени схемы, так и имени класса по коду,
во-вторых, переписываем его как обычный веб-сервис, принимающий параметры по GET, а в его теле уже вызываем нужный нам БП с нужным нам параметром,
в нашем тесте это БП: UsrTestProcc с параметром UstTestPhone.
Бизнес процесс может быть любым, с любым количеством параметров, в данной инструкции наш тестовый БП не рассматривается,
единственное что, в процессе должен стоять флаг "сериализовать в сессию", должен стоять флаг "принудительная компиляция", и не стоять "сериализовать в БД", а также процесс не должен содержать тега,
суть вопроса в другом,
а именно в вызове его при получении GET запроса с параметром, с стороннего сайта\службы\сервиса\чего-угодно по протоколу HTTP,
итак, код сервиса во вложении (UsrLaunchProccService.txt), там написан как CORS, так и вызов БП, теперь доработаем конфиги что бы позволить вызывать сервис по урл:
http(или https)://адрес-сайта/0/ServiceModel/UsrLaunchProccService.svc
2. В папке сайта в котором написан наш сервис, *сайт*\Terrasoft.WebApp\ServiceModel
Создаем файл «UsrLaunchProccService.svc»
В содержимое файла пишем:
3. В папке *сайт* \Terrasoft.WebApp в файле Web.config рядом с другими локациями, добавляем:
4. В папке *сайт*\Terrasoft.WebApp\ в файле Web.config в секции appSettings меняем значение ключа AllowedLocations. В значение добавляем:
ServiceModel/UsrLaunchProccService.svc;
5. В папке *сайт*\Terrasoft.WebApp\ServiceModel\http в файле services.config в блоке сервисов добавляем:
6. В папке *сайт*\Terrasoft.WebApp\ServiceModel\https в файле services.config в блоке сервисов делаем то же самое, что и в пункте 5.
Все, сервис будет доступен по адресу:
http(или https)://адрес-сайта/0/ServiceModel/UsrLaunchProccService.svc
К примеру в нашем локальном примере, вызов БП с параметром телефона "123" выглядит так: http://localhost:8006/0/ServiceModel/UsrLaunchProccService.svc/runUsrTe…
[/code]
Но это просто запуск извне процесса с параметрами. Если нужно какой-то пользовательский интерфейс, как в лендинге, то придётся его делать вручную.
А у меня еще один вопрос появился. Знает ли кто как включить CORS? А то у меня запросы к локальной версии bpm с браузера не проходят, ругается что сервер не поддерживает CORS.
Здравствуйте. По выше описанному добавил web сервис. При вызове ему передаються текстовые данные в формате JSON.
[csharp]
[OperationContract]
[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped,
RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
public string chatStarted() {
var Request = HttpContext.Current.Request;
StreamReader reader = new StreamReader(Request.InputStream);
string requestFromPost = reader.ReadToEnd();
string result = "chatStarted result: " + requestFromPost;
return result;
}
[/csharp]
Но при получении InputStream, возвращаеться ошибка: Этот метод или свойство не поддерживается после вызова HttpRequest.GetBufferlessInputStream."
System.Web.HttpRequest.BinaryRead(Int32 count)
в Terrasoft.Configuration.UsrChatraWebhooks.chatStarted()
в SyncInvokechatStarted(Object , Object[] , Object[] )
в System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
в System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
в System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)
в System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc& rpc)
в System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)
"Дашкевич К." написал:Но при получении InputStream, возвращаеться ошибка:
Как-то слишком наворочено) Если надо принять строку, то [csharp]
[OperationContract]
[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped,
RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
public string chatStarted(string input) {...} ///автоматом десериализует в строку
[/csharp]
Если надо принять Json, мы делаем так:
[csharp]
[OperationContract]
[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped,
RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
public string chatStarted(newMessage input) {...} ///автоматом десериализует в объект, который предварительно надо описать
[DataContract]
public class newMessage
{
[DataMember]
public string testName { get; set; }
[DataMember]
public DateTime testDate { get; set; }
}
[/csharp]
Если надо stream, то там немного сложнее. придётся выкидывать RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json. Короче, лучше без стрима)
Попробовал ваш метод первый и второй:
[csharp]
[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
public class UsrChatraWebhooks
{