Question
· Jan 6

Adapteur UDP ne fonctionne pas

Bonjour

J'essaie de travailler avec l'Adapteur/Connection UDP- et j'ai cette erreur .

ERREUR #5002: Erreur Cache: <WRITE>zSend+5^EnsLib.UDP.Common.1

 Voici la méthode
 

Class TEMPLATE.BO.UDPSend Extends Ens.BusinessOperation
{

Parameter ADAPTER = "EnsLib.UDP.OutboundAdapter";

Property Adapter As EnsLib.UDP.OutboundAdapter;

Method SendData(pInput As Ens.Request, Output pOutput As Ens.Response) As %Status
{
    Try {
        Set status=$$$OK
        Set pOutput=##class(Ens.Response).%New()
        
        Set stream = ##class(%Stream.GlobalCharacter).%New()
        Do stream.Write("This is some text")
        $$$LOGINFO(stream.Read())
        Do stream.Rewind()

        Set status = ..Adapter.SendStream(stream)
    }
    Catch exception {
        Set status=exception.AsStatus()
    }    
    Return status
}

XData MessageMap
{
<MapItems>
<MapItem MessageType="Ens.Request">
<Method>SendData</Method>
</MapItem>
</MapItems>
}

}

J'ai essayé avec ##class(%Net.UDP).%New() et cela fonctionne.

Quelqu'un a t'il une idée de pourquoi cela ne fonctionne pas ou des exemples d'une méthode fonctionnel, s'il vous plaît?

 

Par avance, merci


Corentin

PS : Pour ceux qui ne veulent pas explorer le code pour trouver la ligne où est généré l'erreur :

zSend(pDevice="",pBuffer) public { Set:'($data(pBuffer)#2) pBuffer=""
    Set tStatus = 1
    Try {
        Do pBuffer.Rewind()
        Use pDevice Do pBuffer.OutputToDevice()
        Use pDevice Write !
    }
    Catch eSend {
        Set tStatus = eSend.AsStatus()
    }
    Quit tStatus }
Version du produit: Ensemble 2018.1
$ZV: Cache for Windows (x86-64) 2018.1.4 (Build 505_1U) Thu May 28 2020 10:01:40 EDT
Discussion (1)2
Connectez-vous ou inscrivez-vous pour continuer

Bonjour @Corentin Blondeau 

Je n'ai pas pu tester par moi-même, mais intuitivement je pense qu'il manque une une Instruction "Open" pour que le "Use" et "Write" puisse fonctionner.

Essayez avec un appel à la méthode Open de l'adapter avant le SendStream: 

$$$TOE(status,..Adapter.Open(..Adapter.Device))
Set status = ..Adapter.SendStream(stream)
Do ..Adapter.Close(..Adapter.Device)