هل هناك شيء من هذا القبيل حدث OnClientConnected الاتصال عن بعد. NET؟

StackOverflow https://stackoverflow.com/questions/1409239

سؤال

وأنا باستخدام شيء من هذا القبيل في خدمة بلدي:

TcpServerChannel channel = new TcpServerChannel(settings.RemotingPort);
ChannelServices.RegisterChannel(channel, true);
RemotingServices.Marshal(myRemoteObject, "myRemoteObject");

وأود أن الاشتراك في بعض نوع من الحدث بحيث كلما يتصل العميل البعيد إلى myRemoteObject، ويمكن التحقق من Thread.CurrentPrincipal.Identity.Name أن تقرر ما إذا كان يأذن له.

وحاليا أقوم به في الاختيار الإذن في كل أسلوب بعيد المكشوفة من myRemoteObject وهو الفوضى ...

هل كانت مفيدة؟

المحلول

في تطبيق الاتصال عن بعد بلدي أنا تعريف الكائن الخاصة / واجهة التي تحتاج أولا للعملاء يأذن. ثم إرجاع الكائن خاص، إذا كان العميل أذن كائن بعيد بنجاح. حتى يكون لديك إذن في مكان واحد.

ويبدو شيئا من هذا القبيل.

public interface IPortal
{
  object SignIn(string name, string password);
}

public class Portal : MarshalByRefObject, IPortal
{
  private object _remoteObject;

  public Portal() {
    _remoteObject = new RemoteObject();
  }

  public object SignIn(string name, string password) 
  {
    // Authorization
    // return your remote object

    return _remoteObject;
  }
}

في التطبيق الخاص بك استضافة البوابة-كائن

TcpServerChannel channel = new TcpServerChannel(settings.RemotingPort);
ChannelServices.RegisterChannel(channel, true);
Portal portal = new Portal()
RemotingServices.Marshal(portal , "portal");

نصائح أخرى

هل يمكن استخدام شيء من هذا القبيل PostSharp لعامل من علامة الاختيار من كل وسيلة - مجرد القيام بذلك في نصيحة اوب. (يمكنك تطبيق هذا إلى الطبقة التي كشف أساليبها، وليس لاتصال العميل).

وهذا النهج هو مستقل من أي النقل التي تستخدمها لعن بعد - أن العوامل لتو القلق عبر قطع التفويض في جميع الطرق في الصف إبعاد بك

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top