2007年5月10日 星期四

檢查誰在呼叫我

assembly發佈出去之後,會被誰呼叫,真的是不知道。

有時,需要確定只能被自己的程式所呼叫。可以利用檢查stackTrace的方法,得知誰在呼叫

 

public void WhoIsCallingMe()

    {

      string allowPublicKeyToken = "12345567890abcdefg";

      System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace();

      //取得呼叫者的FullName

      string caller = st.GetFrame(1).GetMethod().ReflectedType.Assembly.FullName;

      System.Text.RegularExpressions.Match m = Regex.Match(caller, "PublicKeyToken=(.{16})");

 

      if ((!m.Success) || (!m.Groups[1].Value.Equals(allowPublicKeyToken)))

        throw new System.Security.SecurityException("未知的caller");

    }

 

沒有留言:

Share with Facebook