Здравствуйте, вот инструкция по написанию сервиса, вызывающего БП, доступного по HTTP\GET с передачей параметров в БП:1. Вносим правки в наш «UsrLaunchProccService», во-первых, добавим Usr, как в имени схемы, так и имени класса по коду,
во-вторых, переписываем его как обычный веб-сервис, принимающий параметры по GET, а в его теле уже вызываем нужный нам БП с нужным нам параметром,
в нашем тесте это БП: UsrTestProcc с параметром UstTestPhone.
Бизнес процесс может быть любым, с любым количеством параметров, в данной инструкции наш тестовый БП не рассматривается,
единственное что, в процессе должен стоять флаг "сериализовать в сессию", должен стоять флаг "принудительная компиляция", и не стоять "сериализовать в БД", а также процесс не должен содержать тега,
суть вопроса в другом,
а именно в вызове его при получении GET запроса с параметром, с стороннего сайта\службы\сервиса\чего-угодно по протоколу HTTP,
итак, код сервиса во вложении (UsrLaunchProccService.txt), там написан как CORS, так и вызов БП, теперь доработаем конфиги что бы позволить вызывать сервис по урл:
http(или https)://адрес-сайта/0/ServiceModel/UsrLaunchProccService.svc2. В папке сайта в котором написан наш сервис, *сайт*\Terrasoft.WebApp\ServiceModel
Создаем файл «UsrLaunchProccService.svc»
В содержимое файла пишем:<%@ ServiceHost Language="C#" Debug="true" Service="Terrasoft.Configuration.UsrLaunchProccService" CodeBehind="UsrLaunchProccService.svc.cs"%>3. В папке *сайт* \Terrasoft.WebApp в файле Web.config рядом с другими локациями, добавляем:<location path="ServiceModel/UsrLaunchProccService.svc"><system.web><authorization><allow users="*"/></authorization></system.web></location>4. В папке *сайт*\Terrasoft.WebApp\ в файле Web.config в секции appSettings меняем значение ключа AllowedLocations. В значение добавляем:
ServiceModel/UsrLaunchProccService.svc;5. В папке *сайт*\Terrasoft.WebApp\ServiceModel\http в файле services.config в блоке сервисов добавляем:<service name="Terrasoft.Configuration.UsrLaunchProccService"><endpoint name="UsrLaunchProccServiceEndPoint"
address=""
binding="webHttpBinding"
behaviorConfiguration="RestServiceBehavior"
bindingNamespace="http://Terrasoft.WebApp.ServiceModel"
contract="Terrasoft.Configuration.UsrLaunchProccService"/></service>6. В папке *сайт*\Terrasoft.WebApp\ServiceModel\https в файле services.config в блоке сервисов делаем то же самое, что и в пункте 5.
Все, сервис будет доступен по адресу:
http(или https)://адрес-сайта/0/ServiceModel/UsrLaunchProccService.svc
К примеру в нашем локальном примере, вызов БП с параметром телефона "123" выглядит так:
http://localhost:8006/0/ServiceModel/UsrLaunchProccService.svc/runUsrTestProcc/123/
Но это просто запуск извне процесса с параметрами. Если нужно какой-то пользовательский интерфейс, как в лендинге, то придётся его делать вручную.
А у меня еще один вопрос появился. Знает ли кто как включить CORS? А то у меня запросы к локальной версии bpm с браузера не проходят, ругается что сервер не поддерживает CORS.
Но при получении 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)
Если надо stream, то там немного сложнее. придётся выкидывать RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json. Короче, лучше без стрима)