Коллеги, приветствую.

В конфигурации реализован простой веб- сервис, прототип для дальнейших решений, скажем так..

Контракт:

 

namespace SimpleCustomService
{
    [ServiceContract]
    public interface UsrIService
    {
        [OperationContract]
        string SayHello(string value);
    }
}

 

Реализация:

 

namespace SimpleCustomService
{
    public class UsrService : UsrIService
    {
        public string SayHello(string value)
        {
            return "Hello" + value;
        }
    }
}

 

В браузере я могу обратиться к WSDL:

 

http://localhost:8080/0/ServiceModel/SimpleCustomService.svc?wsdl

 

Или так:

 

http://localhost:8080/0/ServiceModel/SimpleCustomService.svc?singleWsdl

 

Но когда я пытаюсь добавить ссылку в проект MS Visual Studio, получаю ошибку:

По ссылке Details следующее:

 

The HTML document does not contain Web service discovery information.
Metadata contains a reference that cannot be resolved: 'http://localhost:8080/0/ServiceModel/SimpleCustomService.svc?wsdl'.
The content type text/html; charset=utf-8 of the response message does not match the content type of the binding (application/soap+xml; charset=utf-8). If using a custom encoder, be sure that the IsContentTypeSupported method is implemented properly. The first 1024 bytes of the response were: '



xmlns="http://www.w3.org/1999/xhtml">
> http-equiv="X-UA-Compatible" content="IE=Edge" /> http-equiv="Content-Type" content="text/html; charset=utf-8" />> href="favicon.ico" rel="shortcut icon" type="image/vnd.microsoft.icon" /><span style="color: #000000; font-weight: bold;">>
    bpm'online bank customer journey
>

   

Нравится

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

Собственно, есть альтернативный ход - сохранить wsdl локально и использовать утилиту wsdl.exe.. Все же хотелось бы понять, почему не удается добавить ссылку - был бы весьма признателен, если бы кто- нибудь поделился знаниями.

Если кликнуть по "Advanced" и затем вписать в URL ссылку на wsdl, то в поле "Web services found at this URL" всегда "The HTML document does not contain Web service discovery information.", а Web reference name и Add reference всегда disabled.

Добрый день, Алексей!

В svc файле должна быть объявлена Factory. Пример ниже.

<%@ ServiceHost Language="C#" Debug="true" Factory="System.ServiceModel.Activation.WebServiceHostFactory" Service="Terrasoft.WebApp.Loader.ServiceModel.AuthService" %>

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

Коллеги, приветствую.

Есть определенный интерес поизучать классы Select, Insert, Update, EntitySchemaQuery и подробнее
разобраться, как с ними работать.

Чтобы это было проще и быстрее мне бы хотелось иметь возможность работать с ними из MS Visual Studio.

Например, запрос из статьи Использование EntitySchemaQuery для построения запросов к базе данных:

// Создание экземпляра запроса, добавление в запрос колонок и источника данных.
Select selectQuery = new Select(UserConnection)
                    .Column("Id")
                    .Column("Name")
                    .From("Contact");
// Выполнение запроса к базе данных и получение результирующего набора данных.
using (DBExecutor dbExecutor = UserConnection.EnsureDBConnection())
{
    using (IDataReader reader = selectQuery.ExecuteReader(dbExecutor))
    {
        while (reader.Read())
        {
            // Обработка результатов запроса.
        }
    }
}

Собственно, вопрос в конфигурировании класса UserConnection, как его использовать "вне платформы", не в режиме отладки?

Например, в методе Main:

static void Main(string[] args)
{
}

В элементе "Задание- сценарий" я могу получить его таким образом:

var userConnection = Get("UserConnection");

В Web- сервисе WCF:

var userConnection = (UserConnection)HttpContext.Current.Session["UserConnection"];

Был бы весьма признателен за информацию.

Спасибо.

--
С уважением, Алексей Быков.

Нравится

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

Здравствуйте.
Если сайт у вас развернуть on-site, то есть, поднят на своем IIS сервере:
Тогда у вас есть возможность написать свой, к примеру, веб-сервис, или даже скрипт-сценарий, и пользуясь статьей по отладке,
http://academy.terrasoft.ru/documents/docs/technic/SDK/7.6.0/ServerCode…
ставить точки останова, и изучать поведение серверного ESQ.
Здесь главное, что бы код был частью системы, поэтому его и нужно писать как часть системы (веб-сервис, бизнес-процесс, и.т.д.), а не сторонние dll,exe,итд.
С автономной программы этого сделать не получится.

Если же сайт on-demand, то есть, развернут как http://имя-сайта.bpmonline.com/
То такой возможности у Вас нет, и со стороннего процесса (программы), Вы никак не обратитесь к ядру системы.
Из сторонних программ написанных Вами в Visual Studio, Вы можете разве что обратится к уже написанным веб-сервисам в рамках структуры сайта, либо же по протоколу OData,
http://academy.terrasoft.ua/documents/docs/technic/SDK/7.4.1/WorkWithBp… что, конечно же, совсем не запросы ESQ.

Александр, спасибо большое за ответ!

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

Коллеги, приветствую.

Ознакомился со статьей Отладка серверного кода, пытаюсь начать отладку некоторого действия бизнес- процесса.

Например, у меня есть некоторое задание- сценарий, где я пишу -

// Создание экземпляра запроса, добавление в запрос колонок и источника данных.
Select selectQuery = new Select(UserConnection)
                                        .Column("Id")
                                        .Column("Name")
                                        .From("Contact");
// Выполнение запроса к базе данных и получение результирующего набора данных.
using (DBExecutor dbExecutor = UserConnection.EnsureDBConnection())
{
        using (IDataReader reader = selectQuery.ExecuteReader(dbExecutor))
        {
                while (reader.Read())
                {
                        // Обработка результатов запроса.
                }
        }
}
return true;

(Пример - Использование EntitySchemaQuery для построения запросов к базе данных)

Публикую, компилирую сборку и получаю в итоге -

При попытке компиляции возникло: ошибок - 3, предупреждений - 2

В ходе кодогенерации компиляция не удалась и файлов символов, соответственно, нет - точки останова не срабатывают:

The breakpoint will not currently be hit.
No symbols have been loaded for this document.

Сгенерированный код, который я пытаюсь отладить в Visual Studio -

Нужно- ли определять директивы using в действии "Задание- сценарий"?

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Data;
using Terrasoft.Common;
using Terrasoft.Core;
using Terrasoft.Core.DB;
using Terrasoft.Core.Entities;
...

Если да, то они тоже попадут в тело метода ScriptTask1Execute.
Как правильно написать серверный код в действии "Задание- сценарий", чтобы его можно было отладить в MS Visual Studio? Особенно, если на вход действия подается некий параметр события, который в IDE определяет как undefined?

Был бы весьма признателен за информацию.

Спасибо.

--
С уважением, Алексей Быков.

Нравится

8 комментариев

В 7.7 есть особенности использования UserConnection в БП.
Подробнее можно ознакомиться в теме:
http://www.community.terrasoft.ru/forum/topic/14645
Директивы using указываются один раз для всего процесса. Делается это структуре процесса (боковая панель).

Александр, большое спасибо за ответ! Сейчас поизучаю.

Превосходно, очень признателен. То, что мне и нужно было.

Кстати сказать, попытался получить экземпляр класса UserConnection и некоторый параметр процесса таким образом:

var userConnection = Get("UserConnection");
var temp = Get("addedRecordId");

Ошибки компиляции:

Если использовать context.UserConnection, то все Ок.

Попробуйте явно указать тип для метода Get

var userConnection = Get<UserConnection>("UserConnection");
var temp = Get<Guid>("addedRecordId");

И судя по ошибкам temp у Вас объявляется 2 раза.

Также можно указать флаг принудительная компиляция для элемента или процесса и он будет всегда компилироваться, тогда Вам не нужно будет использовать данный подход.

Александр, спасибо еще раз!

Да, все верно, temp я объявил два раза. Попробую явно указать тип.

Да, если явно указать тип, то все Ок.

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