日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Remoting核心类库RealProxy迁移

發布時間:2023/12/4 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Remoting核心类库RealProxy迁移 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? 在學習.net core的過程中,我們已經明確被告知,Remoting將不會被支持。官方的解釋是,.net framework 類型包含了太多的Runtime的內容,是一個非常重量級的服務實現,已被確定為一項有問題的體系結構。說白了就是遷移的難度很大,.net core中直接不提供了。微軟的建議是,如果是進程內或跨進程通訊,建議我們使用 Pipes或者內存映射文件(Memory Mapped Files)。如果是機器間的調用,建議我們采用網絡通訊的方案,比如HTTP、WCF等。

??? 好吧,既然微軟官方不支持, 我們只能自己想辦法搞定了。

??? OK,說遷移方案前,我們先看看.net Framework中,使用Remoting的代碼:

??? 通過Remoting封裝后的服務調用方法,我們可以直接得到一個服務接口的實現,通過調用次接口的本地代理實現執行遠程調用。

static void Main(string[] args)
{
???????????? IUserService service = InvokeSerice.Proxy<IUserService>();
???????????? string uName = service.GetCurrentUserName();

??????????? Console.WriteLine($"當前用戶名:{uName}");
???????????? Console.ReadLine();
}

??? IUserService接口的聲明如下:

public interface IUserService
{
???????? string GetCurrentUserName();
}

??? InvokeService方法的核心實現邏輯如下:

//遠程調用服務提供類

public class InvokeService
{

??????? //獲取一個服務的本地調用代理對象
???????? public static T Proxy<T>()
???????? {
???????????? var proxy = new InvokeProxy<T>();
???????????? return (T)proxy.GetTransparentProxy();
???????? }
}

?

//服務本地代理對象實現類

public class InvokeProxy<T> : RealProxy
{
???????? private Type type = null;
???????? public InvokeProxy() : this(typeof(T))
???????? {
???????????? type = typeof(T);
???????? }

??????? protected InvokeProxy(Type classToProxy) : base(classToProxy)
???????? {
???????? }

??????? //接收本地調用請求,然后轉發遠程訪問

??????? public override IMessage Invoke(IMessage msg)
???????? {
???????????? Console.WriteLine("Invoke 遠程服務調用!");
???????????? ReturnMessage message = new System.Runtime.Remoting.Messaging.ReturnMessage("Test",null,0,null,(IMethodCallMessage)msg);

??????????? return (IMessage)message;
???????? }
}

??? 通過.NET Portability Analyzer分析這個工程,我們會得到系統不支持的結果。

??? 既然,.net core 已經不支持RealProxy,那么就只能另起爐灶了。通過翻閱.net core的代碼,終于發現了一個程序集:System.Reflection.DispatchProxy。此程序中,有一個類型DispatchProxy。(靈感還是來自于WCF。WCF是.net 中重量級的API,微軟不可能不支持,通過翻閱其中的實現邏輯,終于到了RealProxy的替代方案。)

???? 好吧,通過DispatchProxy提供的功能,很容易可以替代RealProxyP,Remoting的問題終于比較完美的解決了。下面就貼一下替換后的服務實現代碼吧。

public class InvokeSerice
{
???????? public static T Proxy<T>()
???????? {
???????????? return DispatchProxy.Create<T, InvokeProxy<T>>();
???????? }
}

public class InvokeProxy<T> : DispatchProxy
{
???????? private Type type = null;
???????? public InvokeProxy()
???????? {
???????????? type = typeof(T);
???????? }

??????? protected override object Invoke(MethodInfo targetMethod, object[] args)
???????? {
???????????? Console.WriteLine("Invoke 遠程服務調用!");

??????????? return "Test";
???????? }
}

相關文章:?

  • .NET應用遷移到.NET Core(一)

  • .NET應用遷移到.NET Core(二)風險評估

  • .NET應用遷移到.NET Core(三)從商業角度看移植過程

  • .NET應用遷移到.NET Core--調查案例

  • 遷移傳統.net 應用到.net core [視頻]

  • 應用工具 .NET Portability Analyzer 分析遷移dotnet core

  • .net core 2.0學習筆記(一):開發運行環境搭建

  • .net core 2.0學習筆記(二):Hello World & 進階

  • 度量.net framework 遷移到.net core的工作量

  • 遷移.net framework 工程到.net core

  • .NET Core 2.0遷移技巧之web.config配置文件

  • 程序配置&ConfigurationManager

原文地址:http://www.cnblogs.com/vveiliang/p/7434735.html


.NET社區新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關注

總結

以上是生活随笔為你收集整理的Remoting核心类库RealProxy迁移的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。