Hello,
I tested it again and now I know where the problem is. The service part is
fine but the client one is working with problems. My server can send a very
big images to the clients and clients working under Windows (written in C#)
are ok. However when I want to implement the same clients (using AxisC++)
under Linux then I have a problems,
If the data which should be received is bigger than 36615 bytes I can not
receive it.
Here is the code:
xsd__base64Binary Imager::add(xsd__int Value0)
{
xsd__base64Binary Ret;
const char * pcCmplxFaultName = NULL;
try
{
if( AXIS_SUCCESS != m_pCall->initialize( CPP_RPC_PROVIDER))
{
return Ret;
}
if( NULL == m_pCall->getTransportProperty( "SOAPAction",
false))
{
m_pCall->setTransportProperty( SOAPACTION_HEADER,
"Imager#add");
}
m_pCall->setSOAPVersion( SOAP_VER_1_1);
m_pCall->setOperation( "add",
"http://localhost/axis/Imager");
applyUserPreferences();
m_pCall->addParameter( (void *) &Value0, "in0", XSD_INT);
if( AXIS_SUCCESS == m_pCall->invoke())
{
if( AXIS_SUCCESS == m_pCall->checkMessage(
"addResponse",
"http://localhost/axis/Imager"))
{
//******************************************
//Here is the place when the code can
hang...
//*******************************************
xsd__base64Binary * pReturn =
m_pCall->getElementAsBase64Binary( "addReturn", 0);
if( pReturn)
{
Ret = *pReturn;
Axis::AxisDelete( (void *) pReturn,
XSD_BASE64BINARY);
}
}
}
m_pCall->unInitialize();
return Ret;
}
catch( AxisException& e)
{
int iExceptionCode = e.getExceptionCode();
if( AXISC_NODE_VALUE_MISMATCH_EXCEPTION != iExceptionCode)
{
throw SoapFaultException( e);
}
ISoapFault * pSoapFault = (ISoapFault *)
m_pCall->checkFault( "Fault",
"http://localhost/axis/Imager");
if( pSoapFault)
{
m_pCall->unInitialize();
throw SoapFaultException( e);
}
else
{
throw;
}
}
}
Regards,
Pawel
-----Original Message-----
From: Adrian Dick [mailto:[EMAIL PROTECTED]
Sent: Thursday, June 01, 2006 11:31 AM
To: Apache AXIS C User List
Subject: Re: xsd_Base64
Hi,
You say the maximum data size you can use is 36,615 -- is this just for a
particular example, or have you experimented with different sizes around
this value?
Taking a quick look through the code, I can see that we may have a problem
with large data objects, as the data length is stored as an int.
According to the ANSI C spec this is a signed 16bit integer, so having a
maximum value of 32,767, although a number of compilers use a 32bit integer
which increase this to a maximum value of 2,147,483,647.
Changing this to an unsigned long long (64bit integer) will give a maximum
of 18,446,744,073,709,551,615, sufficient for most needs.
Regards,
Adrian
_______________________________________
Adrian Dick ([EMAIL PROTECTED])
"Pawel Pustelnik" <[EMAIL PROTECTED]> wrote on 31/05/2006
20:38:27:
> Hello All,
>
> What is the maximum size of the xsd_Base64 array?
> I am asking because I found something strange.
> I want to send a binary data from the server to the client.
> I implemented the client and server using apache axis and it is
> working but not perfectly.
> I read the image file (for example some JPG file) and send it to the
> client. However when data size is more then 36615 bytes then the
> client can only read 36615 bytes.
> Is it a bug in axis? (I created very similar server in *.asmx file
> under Windows and I can send very big images without any problems).
>
> Regards,
> Pawel
>
>
> --
> Pawel Pustelnik
> Control Engineer
>
> -----------------------------------------------
> Future Processing Sp. z o.o.
> Tel: +48 604 084 653
> Tel/Fax: +48 32 2726202
> [EMAIL PROTECTED]
> www.future-processing.com
> -----------------------------------------------
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]