У меня есть .Net смарт-карта, и я использую C# для создания приложения для карт и приложения-хозяина. На самом деле смарт-карта выступает в качестве сервера в удаленной сети .Net.Исключение .NET remoting ArgumentOutOfRange
В смарт-карте, у меня есть удаленный объект (MyClass), и я удаленный вызов метода:
public int AddPerson (string name,string age)
добавить некоторую информацию к этому объекту.
public class Myclass : MarshalByRefObject
{
private string Text1;
private string Text2;
private int NoOfperson = 0 ;
private person[] List = new person [6];
public void setText1(string t)
{ Text1= t; }
public void setText2(string t)
{ Text2= t }
public string getText1()
{ return Text1; }
public string getText1()
{ return Text1; }
public int AddPerson (string name,string age)
{
person OBJ = new person();
OBJ.Name = name;
OBJ.Age = age;
List[NoOfperson] = OBJ;
NoOfperson ++;
return NoOfperson - 1 ; //Index of current person
return 1 ;
}
public PersonStruct getPesrson(int index)
{
return PersonStruct.convertToStruct(List[index]);
}
}
людей Класс:
public class person
{
private string name;
private string age;
public string Age
{
get { return age; }
set { age = value; }
}
public string Name
{
get { return name; }
set { name = value; }
}}
PersonStruct:
public struct PersonStruct
{
public string name;
public string age;
public static PersonStruct convertToStruct(person OBJ)
{
PersonStruct tmp = new PersonStruct();
tmp.name = OBJ.Name;
tmp.age = OBJ.Age;
return tmp;
}
Чтобы получить каждый элемент человека массива, я в первую очередь преобразовать его структуру, потому что есть некоторые проблемы, когда я пытаюсь сериализация объект. В любом случае это метод:
public PersonStruct getPesrson(int index)
Проблема возникает в этом методе, хотя они успешно хранятся в смарт-карте. Я получил ArgumentOutOfRange Exception с этими деталями:
Message
Index and length must refer to a location within the string.
TargetSite:
Void HandleReturnMessage(System.Runtime.Remoting.Messaging.IMessage
, System.Runtime.Remoting.Messaging.IMessage)
ParamName:
length
Source:
mscorlib
StackTrace:
Server stack trace:
at System.String.InternalSubStringWithChecks(Int32 startIndex, Int32 length,
Boolean fAlwaysCopy)
at System.String.Substring(Int32 startIndex, Int32 length)
at SmartCard.Runtime.Remoting.a.A(Type , String& , IMessage)
at SmartCard.Runtime.Remoting.a.a(Type , String& , IMessage)
at SmartCard.Runtime.Remoting.a.a(Type , String& , IMessage)
at SmartCard.Runtime.Remoting.a.A(Type , Byte[] , IMessage)
at SmartCard.Runtime.Remoting.a.A(Type , Stream , IMessage)
at SmartCard.Runtime.Remoting.Channels.APDU.APDUClientFormatterSink.SyncProce
ssMessage(IMessage msg)
Exception rethrown at [0]:
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage req
Msg, IMessage retMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgDa
ta, Int32 type)
at medicalrecordApp.medicalrecord.getExamination(Int32 index)
at MyCompany.MyClientApp.MyClient.Main() in C:\Documents and Settings\User\My
Documents\Visual Studio 2008\Projects\Client2\Client2\MyClient.cs:line 36
код вы предоставите не имеет ничего общего с исключением. Пожалуйста, разместите соответствующий код и укажите, при выполнении строки не выполняется. –
Я обновил свой вопрос –
@hum - какие проблемы возникают при сериализации объекта? Вы добавили атрибут Serializable? –