簡體   English   中英

在沒有任何代碼的情況下訪問Web服務中的內部類和方法

[英]Accessing internal classes and methods in a webservice with no code behind

我在某個命名空間中有一個Web服務,我們稱它為MyNamespace 這是一個普通的Web服務,后面的代碼中包含Web方法。 我還有一個附加的.cs文件,其中包含這些Web方法中使用的各種類。 到目前為止一切順利,對嗎?

然后,我還有一個僅用於測試內容的Web服務。 它沒有任何代碼,其代碼直接位於.asmx文件中,因此我可以快速將其上傳到服務器,而無需重建任何內容。 該測試Web服務與MyNamespace提到的Web服務位於同一MyNamespace命名空間中,並且也位於同一項目中。 在我嘗試訪問MyNamespace內部成員之前,它MyNamespace 它們是看不見的,就好像它們是私人的一樣,這無法完成。

這就是我可能開始胡說八道的地方,因此,如有必要,請糾正我。 我四處張望,似乎這是“預期的”,因為在運行時會編譯沒有適當代碼的.asmx,而不是適當程序集的一部分。 由於內部成員僅在程序集中可用,因此在我的.asmx代碼中不提供內部成員是完全正確的。 然后我的問題是-我可以以某種方式訪問​​這些成員,而無需將代碼移到文件后面的.asmx.cs代碼嗎?

我想通過反射可以做到這一點。

例如:在公共類上調用內部方法:

var myPublicClass = new PublicClass;
MethodInfo mInfo = typeof(PublicClass).GetMethod("InternalMethodName", BindingFlags.Instance | BindingFlags.NonPublic);

var result = mInfo.Invoke(myPublicCLass, null) // (replace null with an array of parameters if necessary)

或在內部類的實例中創建:

MethodInfo mInfo= Type.GetType(assemblyQualifiedName).GetConstructor(
                        BindingFlags.NonPublic | BindingFlags.Instance,
                        null,
                        new[] { typeof(string) },
                        null
                    );
object myInstance = mInfo.Invoke(new[] { "constructorArgument" });

編輯:內部靜態類上的內部靜態方法:

MethodInfo mInfo = Type.GetType(assemblyQualifiedName).GetMethod("InternalMethodName", BindingFlags.Static| BindingFlags.NonPublic);

var result = mInfo.Invoke(null, null) // (replace 2nd null with an array of parameters if necessary)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM