I can’t reproduce this issue.
Delphi server - server.zip (108.1 KB)
C# client - client.zip (5.8 KB)
I guess you dont get the error bcz you use Remobjects Components Client Side.
I add the Service Reference through Visual Studio (Add Service Reference)
I have updated the client code
client_update.zip (10.6 KB)
Regards
When I add the service like that indeed its working with descending types too.
I guess I will have to change that in my application, even though its interesting why it suddenly doesnt work like before.
For me this case is closed.
Thanks for the support
Regards
Well, I thoght its done, but changing to webreference caused some new issues with my service.
- Async methods return void instead of my return type. How can I change that? Do I need to do smt inside of Visual studio or within Delphi while creating the service ?
I also tried setting those settings when adding the web reference but it didnt change anything:
- I cant access array types form my service, they are all changed to C# arrays. For example I was using IntArray from my service, now I have to convert it to int[]. I tried to change the datatype values while adding the web reference, but nothing is changing, it still generates int[] instead of IntArray (I have lots of different array types and it would be too much work to change their behaviour to fit C# arrays). So is there a way to keep my service types and dont let them change to C# types?
Regards
Hello
At first I have to say that all the stuff below refers to tools shipped with Visual Studio, not ones from RemObjects.
Please note that RO SDK provides way more performant and easy to develop ways to communicate between server and client than SOAP. Also it is possible to expose more than one endpoint in the same server - f.e. SOAP one and a more efficient binary serializer for ‘native’ RO SDK clients
The dialog on your screenshots sets options for Service Reference while you create and use the Web Reference that is a completely different thing.
From Visual Studio 2005 onwards the Add Web Reference proxy generator no longer creates the BeginXXX/EndXXX methods. These methods were deprecated in favour of the XXXAsync/XXXCompleted pattern.
Async calls now look like
MyService my = new MyService();
my.HelloCompleted += CallBack;
my.HelloAsync();
Console.WriteLine("Called service.");
Console.ReadLine(); // Wait, otherwise console app will just exit.
However it is still possible to generate Begin/End method pairs instead of this patern. Please take a look at c# - asynchronous webservice call. No (Begin...) method available! - Stack Overflow
In considers such type definitions as plain .NET arrays
<xs:complexType name="IntArray">
<xs:sequence>
<xs:element name="int" minOccurs="0" maxOccurs="unbounded" type="xs:int" />
</xs:sequence>
</xs:complexType>
AFAIK there is no way to customize this
Regards
Obiously I will have to switch to REMObjects in order to get it running again…
When I call one of my functions, this is the error I get:
Ein Ausnahmefehler des Typs "RemObjects.SDK.Types.ServerException" ist in RemObjects.SDK.dll aufgetreten.
Zusätzliche Informationen: '4da6a80d-c266-42a3-b626-b64fcbd420c5' kein gültiger Wert für GUID
What does this error usually mean ?
Regards
can you review uROSOAPMessage.pas and update _ParseGuid
method as
function TROSOAPMessage.ParseEnvelope : boolean;
function _ParseGuid(value: string): TGUID;
begin
if (pos('{',value) = 0) then begin //changed
value := '{'+value+'}'
end;
result := StringToGUID(value);
end;
after updating, pls retest
Just to be clear, I am getting that error on my Visual Studio client (with Remobjects).
The code you posted is Delphi, so I should do my changes inside delphi (server side)?
Regards
yes, pls change server-side code (delphi)
After first couple tests it seems to work and I can call my remote methods without the error message. But I will write again when I convert my whole client.
One question, is that a bug in my build ?
Regards
if you mean code in _ParseGuid
- it was bug and it was already fixed
Hi,
is there any fixed bug regarding enum types ?
When I set one of my types (server side) as an enum and try to retrieve it on the client I get an error while serializing.
For example (server):
Akthistory.Art := jxsDatenTyp_dtForderung
this is the type:
[RODocumentation('Deutsch: Definition des Typs fuer einen Eintrag in der Akthistorie English: Type definition for an item in the filehistory')]
jxsDatenTyp = (
[RODocumentation('Deutsch: Forderung English: Claims')]
jxsDatenTyp_dtForderung,
[RODocumentation('Deutsch: Leistung English: Service')]
jxsDatenTyp_dtLeistung,
[RODocumentation('Deutsch: Zahlung English: Payment')]
jxsDatenTyp_dtZahlung,
[RODocumentation('Deutsch: Termin English: Calendaritem')]
jxsDatenTyp_dtTermin,
[RODocumentation('Deutsch: Notiz English: Notice')]
jxsDatenTyp_dtNotiz,
[RODocumentation('Deutsch: Dokument English: Document')]
jxsDatenTyp_dtDokument
);
Now when I try to get the value in my client, I get an error message inside:
ReadComplex
In particular its this line:
Art = ((jxsDatenTyp)(serializer.Read("Art", typeof(jxsDatenTyp), RemObjects.SDK.StreamingFormat.Default)));
I checked
serializer.ReadWideString("Art")
and endeed, the value is “” (empty) which cannot be true (especially not when its an enum type). The error message is “wrong format type” (because an empty string is being converted to an integer)
Am I missing something here ?
My workaround for now is that I changed Art
to type integer
, and I set ord(jxsDatenTyp_dtForderung)
as the value and then it works fine.
Regards
Hello
You use a CodeFirst server and SOAP message,am I right? May I ask you for a testcase (simple server with the same message settings and only one method that sends the abovementioned structure)?