Параллельные звонки на веб-сервис в COM-приложение (Primavera ERP) - PullRequest
1 голос
/ 23 октября 2019

У меня есть веб-сервис, который вызывает функцию и создает продажу в ERP PRIMAVERA, она работает, если я вызываю ее последовательно, но если я вызываю ее одновременно, потому что ERP не поддерживает потоки и может создавать только одну за один раз. Веб-сервис зависает как системы, клиент и ERP. Я не знаю, как это решить. Что я могу сделать .?

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

    <WebMethod()>
    Public Function InsereVenda(ByVal id As String, ByVal xml As String) As String

        Dim ObjResp As New ObjResposta

        Try

            ObjResp = RetornaObjRespostaDocs("InsereVenda", id, xml)

            Return ObjResp.XMLResposta

        Catch ex As Exception
            If ex.Message = "" Then
                Return "Erro"
            Else

                Return ObjResp.XMLResposta
            End If


        End Try

    End Function
End Class


 Public Class Pedido
    Inherits System.Web.Services.WebService

    Private Function RetornaObjRespostaDocs(ByVal metodo As String, ByVal id As String, ByVal xml As String) As ObjResposta

        Dim msg As String = ""
        Dim servWeb As ServicosWeb
        Dim lista As DataTable

        RetornaObjRespostaDocs = New ObjResposta

        servWeb = New ServicosWeb(My.Settings.Username, My.Settings.Password, My.Settings.Empresa, My.Settings.TipoEmpresa)

        Try

            RetornaObjRespostaDocs.ID = id
            RetornaObjRespostaDocs.XML = xml
            RetornaObjRespostaDocs.DataProc = Now
            RetornaObjRespostaDocs.TipoMsg = metodo




            'While 1 < 2
            '    
            Thread.Sleep(1000)
            servWeb.GuardarRegistoTabelaLOGWebService(id, "", RetornaObjRespostaDocs.TipoMsg,
                                                          RetornaObjRespostaDocs.DataProc, RetornaObjRespostaDocs.XML, "", "0", "R")
            Thread.Sleep(1000)
            lista = servWeb.ConsultaSQLDatatable("select CDU_Estado from TDU_LogWebService  WITH (NOLOCK) where CDU_Estado = 'R'")

            If lista.Rows.Count <=0 Then
                servWeb.InsereVenda(xml, RetornaObjRespostaDocs)
                servWeb.GuardarRegistoTabelaLOGWebService(RetornaObjRespostaDocs.ID, RetornaObjRespostaDocs.Mensagem, RetornaObjRespostaDocs.TipoMsg,
            RetornaObjRespostaDocs.DataProc, RetornaObjRespostaDocs.XML, RetornaObjRespostaDocs.XMLResposta, RetornaObjRespostaDocs.Sucesso, "G")


            Else

                Thread.Sleep(1000)


            End If

            'End While




            Return RetornaObjRespostaDocs

        Catch ex As Exception

            servWeb.GuardarRegistoTabelaLOGWebService(RetornaObjRespostaDocs.ID, RetornaObjRespostaDocs.Mensagem, RetornaObjRespostaDocs.TipoMsg,
                        RetornaObjRespostaDocs.DataProc, RetornaObjRespostaDocs.XML, RetornaObjRespostaDocs.XMLResposta, RetornaObjRespostaDocs.Sucesso, "G")

            Return RetornaObjRespostaDocs

        End Try

    End Function

``

1 Ответ

0 голосов
/ 13 ноября 2019

Похоже, мой код в порядке, просто клиентское приложение вызывало его неправильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...