Avatar billede Lars Søndergaard Nybegynder
01. september 2003 - 17:21 Der er 9 kommentarer og
1 løsning

XML Response hvad og hvordan ?

Jeg skal sende en xml streng til en applikation og jeg får en xml streng retur. Jeg har ingen forstand på xml, så jeg har brug for hjælp ???

Her er kort hvad jeg har lavet:

ConnectToXMLInterface(string hostname, int port);
{Denne metode er færdig og virker}


Følgende metode er hvad jeg lige kan komme på af ideer til at sende en xml streng, men jeg aner ikke om det er rigtig det jeg laver og hvis det er, hvordan fanger jeg den response der skulle komme ?????

SendXMLString(string xml)
{
string sreturn = "";
Encoding ASCII = Encoding.ASCII;
string Get = "<Authorize><OpCode>0</OpCode><MsgId>0</MsgId><Name>UNAME</Name><Password>PASSW</Password><Type>2</Type></Authorize>";
Byte[] ByteGet = ASCII.GetBytes(Get);
sock.Send(ByteGet, ByteGet.Length, 0);

return sreturn;
}

Jeg er blank :-( - håber der er en ekspert der kan guide mig lidt...
Avatar billede Lars Søndergaard Nybegynder
01. september 2003 - 17:24 #1
string xml skulle selvfølgelig sættes lig med denne streng ved metodekaldet, men jeg ville lige vise jer xml strengen.. lidt rodet sorry

<Authorize>
<OpCode>0</OpCode>
<MsgId>0</MsgId>
<Name>UNAME</Name>
<Password>PASSW</Password>
<Type>2</Type>
</Authorize>
Avatar billede odegaard Nybegynder
01. september 2003 - 17:28 #2
Hvad skal du sende til? Er det en webrequest (er det i så fald en get eller post?), eller er det en applikation der bruger en eller anden protokol (og i så fald hvilken?)
Avatar billede Lars Søndergaard Nybegynder
02. september 2003 - 12:26 #3
odegaard > det er en applikation der bruger TCP/IP på port 6666
Avatar billede Lars Søndergaard Nybegynder
03. september 2003 - 10:59 #4
public Byte[] Authorize()
{
Encoding ASCII = Encoding.ASCII;
string XML_string = "<Authorize><OpCode>0</OpCode><MsgId>0</MsgId><Name>sdf</Name><Password>sdf</Password><Type>2</Type></Authorize>";
Byte[] ByteGet = ASCII.GetBytes(XML_string);
Byte[] RecvBytes = new Byte[256];
sock.Send(ByteGet.Length, størrelsen på min xml_string i bytes , 0);
Int32 bytes = sock.Receive(RecvBytes, RecvBytes.Length, 0);
String strRetPage = null;
strRetPage = strRetPage + ASCII.GetString(RecvBytes, 0, bytes);
while (bytes > 0)
{
  bytes = sock.Receive(RecvBytes, RecvBytes.Length, 0);
  strRetPage = strRetPage + ASCII.GetString(RecvBytes, 0, bytes);
}
           
return strRetPage;
}

Jeg ved ikke om dette virker.. denne linje er jeg ikke færdig med:

sock.Send(ByteGet.Length,størrelsen på min xml_string i bytes,0);

Jeg skal finde størelsen på min xml_string i bytes.. hvordan gør jeg det ??
Avatar billede odegaard Nybegynder
03. september 2003 - 11:32 #5
ByteGet.Length() ville jeg tro.
Avatar billede Lars Søndergaard Nybegynder
03. september 2003 - 11:36 #6
yes. jeg har et array bestående af bytes, så længden på det array må nødvendigvis det samme som antallet af bytes.. så derfor skal linje se således ud:
sock.Send(ByteGet,ByteGet.Length,0);
men jeg får stadig ikke nogen response fra min applikation :-(

jeg roder videre med det - alle forslag er mere end velkomne
Avatar billede odegaard Nybegynder
03. september 2003 - 11:52 #7
Jeg mener at enten skal du lave en callback function som kaldes når der kommer et svar, eller også skal du lave en thread.sleep, inden du begynder at receive. Du må jo regne med at der går lidt tid før serveren svarer.
Avatar billede Lars Søndergaard Nybegynder
04. september 2003 - 14:50 #8
jeg har roder lidt videre med det og lavet en anden metode. Her er lidt mere info og min nye metode som desværre heller ikke virker:

Jeg skal forbinde til en applikation via tcp/ip på port 6666, hvilket ikke er noget problem.

Herefter skal jeg sende en XML-streng, men inden jeg sender strengen skal jeg sende nogle andre ting:

1) først skal jeg sende en byte som er et 3 tal (det er hvad jeg har fået at vide om jeg ved ikke om jeg fortolker det korrekt)
Problemet er løst sådan her:
byte abyte = 3;
m_out.Write(abyte);

2) herefter skal jeg sende længden i byte på den xml streng jeg vil sende og dette problem har jeg løst sådan har:
string XML_string = "<xml><OpCode>0</OpCode><MsgId>0</MsgId><User>Admin</User><Password>Admin</Password></xml>";
Byte[] ByteGet = ASCII.GetBytes(XML_string);
m_out.Write(ByteGet.Length);

3) til sidst sendes indholdet af XML-strengen i form af (et Byte[], længden på dette array, og count 0 - ved ikke hvad det betyder)

Som response på dette skulle jeg gerne få en XML streng retur

Her ses min metode som udfører det hele.


public string Send()
{
    Encoding ASCII = Encoding.ASCII;
        string XML_string = "<xml><OpCode>2</OpCode><MsgId>2</MsgId><User>User</User><Password>Admin</Password></xml>";
    Byte[] ByteGet = ASCII.GetBytes(XML_string);
    TcpClient tcpclient = new TcpClient();
    tcpclient.Connect("hostname.somehost.com",6666);
    NetworkStream networkStream = tcpclient.GetStream();
    BinaryWriter m_out = new BinaryWriter(networkStream);
    byte abyte = 3;
    m_out.Write(abyte);
    m_out.Flush();
    m_out.Write(ByteGet.Length);
    m_out.Flush();
    m_out.Write(ByteGet,ByteGet.Length,0);
    m_out.Flush();
    //tcpclient.SendTimeout = 5000;
             
    BinaryReader m_in = new BinaryReader(networkStream);
    Byte[] RecvBytes = new byte[256];
                     
    int bytes = m_in.Read(RecvBytes, 0, RecvBytes.Length);  /Denne linje får server til at dø med en out of memoryerror
        string strRetPage = null;
    strRetPage = strRetPage + ASCII.GetString(RecvBytes, 0, bytes);

    while (bytes > 0)
    {
            bytes = m_in.Read(RecvBytes, 0, RecvBytes.Length);
            strRetPage = strRetPage + ASCII.GetString(RecvBytes, 0, bytes);
    }
    return strRetPage;
}

Enhver form for hjælp, ideer vil være dejligt :-)
Avatar billede odegaard Nybegynder
04. september 2003 - 15:14 #9
Hvor ville det dog være nemt, hvis din serviceprovider i stedet tilbød en ægte webservice som fulgte de gældende standarder :-)
Har du overvejet at lave dit problem til din serviceproviders problem? Du kan jo bare spørge hvorfor man ikke følger standarderne :)
Avatar billede Lars Søndergaard Nybegynder
04. september 2003 - 16:56 #10
ja det har jeg i høj grad.. det er sgu fustrerende - men det kan ikke være anderledes.. der er ingen der kan hjælpe med dette her, fpr deres lorteapplikation kræver endnu flere specielle ting.. har lige snakket med dem igen..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester