لقد تعلمت مؤخرًا كيفية العمل عن بعد، فقط لفهمه، ووجدت أن العمل عن بعد هو بالفعل شيء جيد.
لدينا عادة ثلاث طرق لاستخدام الاتصال عن بعد، إحداهما هي
الأولى: نشر كائن عام
يتم إنشاء الكائنات العامة محليًا. النوع الثاني: إنشاء كائن عام (SAO) عن بعد.
النوع الثالث من إنشاء الكائنات في طلبات العميل: إنشاء كائن خاص عن بعد (CAO)
يتم إنشاء الكائن على HOST، ويشير العميل إلى دليل الكائن على الخادم،
وليس لدي فهم جيد للاختلافات الأساسية بين هذه الأنواع الثلاثة. تختلف أيضًا طرق الإنشاء عن بعد لهذه الطرق الثلاثة.
الطريقة الأولى
يستضيف:
ChannelServices.RegisterChannel (new TcpChannel(1500));
cTransfer Trans = new cTransfer();
RemotingServices.Marshal (Trans، "TestService")؛ العميل:
cTransfer T = (cTransfer) Activator.GetObject(typeof(cTransfer)،
"tcp://host:1500/TestService");
الطريقة الثانية
يستضيف:
ChannelServices.RegisterChannel (new TcpChannel(1500));
RemotingConfiguration.RegisterWellKnownServiceType(typeof(cTransfer),
"TestService"، WellKnownObjectMode.Singleton)؛ العميل:
cTransfer T = (cTransfer) Activator.GetObject(typeof(cTransfer)،
"tcp://host:1500/TestService");
الطريقة الثالثة
يستضيف:
ChannelServices.RegisterChannel (new TcpChannel(1500));
RemotingConfiguration.RegisterActivatedServiceType(typeof(cTransfer));Client:
object[] attr = {new UrlAttribute("tcp://host:1500"});
object[] args = {"نموذج وسيطة المنشئ"};
cTransfer T = (cTransfer) Activator.CreateInstance(typeof(cTransfer), args, attr);
إذا كنا بحاجة إلى كائن للسماح بمعالجة المكالمات عن بعد، فيجب أن يرث هذا الكائن من فئة MarshalByRefObject.
كيفية نقل الملفات أثناء البعيد؟ الفكرة الأساسية هي فتح ملف العميل في العميل وتحويل نوع Byte[] ثم استدعاء الكائن المضيف.
الكائنات المنقولة بين العميل والمضيف
[قابل للتسلسل]
البنية العامة kAction
{
اسم ملف السلسلة العامة؛
سياق البايت العام[]؛
};افتح الملف واحفظ وحدات بايت الدفق في السياق
دفق fileStream=File.Open(this.transFileName.Text,FileMode.Open);
fileStream.Position=0;
بايت[] المحتوى = بايت جديد[((int) fileStream.Length) + 1];
fileStream.Read(Content,0,Content.Length);
بعد أن يقرأ المضيف Kaction، فإنه يحفظه في المجلد المحدد.
MemoryStream meoeryStream=new MemoryStream(k_Action.context);
FileStream fileStream=new FileStream(@"d:"+k_Action.filename,FileMode.Create);
meoeryStream.WriteTo(fileStream);
fileStream.Close();
meoeryStream.Close();
لقد وجد أنه لا يمكن تعريف كائنات جديدة في الكائن. عند الاستعداد للإرسال إلى المضيف، ستظهر رسالة "يحتوي على أنواع قد تكون خطرة".
[قابل للتسلسل]
البنية العامة kAction
{
اسم ملف السلسلة العامة؛
سياق البايت العام[]؛
public FineInfo fileInfo;//هنا
};
سجل أفكارك. عندما يكون لدي الوقت، سأقوم بترتيب الأمر وأقوم بإعداد مقالة كاملة في المرة القادمة.
مدونات cnzc