Remoting和Web服務的區別
一、Remoting的優缺點?
優點:
1、能讓我們進行分散式開發
2、Tcp通道的Remoting速度非常快
3、雖然是遠端的,但是非常接近於本地呼叫物件
4、可以做到保持物件的狀態
5、沒有應用程式限制,可以是控制檯,winform,iis,windows服務承載遠端物件
缺點:
1、非標準的應用因此有平臺限制
2、脫離iis的話需要有自己的安全機制
二、Remoting和Web服務的區別?
ASP.NET Web 服務基礎結構通過將 SOAP 訊息對映到方法呼叫,為 Web 服務提供了簡單的 API。通過提供一種非常簡單的程式設計模型(基於將 SOAP 訊息交換對映到方法呼叫),它實現了此機制。ASP.NET Web 服務的客戶端不需要了解用於建立它們的平臺、物件模型或程式語言。而服務也不需要了解向它們傳送訊息的客戶端。唯一的要求是:雙方都要認可正在建立和使用的 SOAP 訊息的格式,該格式是由使用 WSDL 和 XML 架構 (XSD) 表示的 Web 服務合約定義來定義的。
. NET Remoting 為分散式物件提供了一個基礎結構。它使用既靈活又可擴充套件的管線向遠端程式提供 .NET 的完全物件語義。ASP.NET Web 服務基於訊息傳遞提供非常簡單的程式設計模型,而 .NET Remoting 提供較為複雜的功能,包括支援通過值或引用傳遞物件、回撥,以及多物件啟用和生命週期管理策略等。要使用 .NET Remoting,客戶端需要了解所有這些詳細資訊,簡而言之,需要使用 .NET 建立客戶端。.NET Remoting 管線還支援 SOAP 訊息,但必須注意這並沒有改變其對客戶端的要求。如果 Remoting 端點提供 .NET 專用的物件語義,不管是否通過 SOAP,客戶端必須理解它們。
三、最簡單的Remoting的例子
1、遠端物件:
建立類庫專案:RemoteObject
建立配置檔案:app.config
3、客戶端:
建立控制檯專案:RemoteClient
建立配置檔案:app.config
4、測試
在最後編譯的時候會發現編譯報錯:
1、找不到app.Add()
2、找不到RemoteObject
這是因為客戶端RemoteClient沒有新增RemoteObject的引用,編譯器並不知道遠端物件存在哪些成員所以報錯,新增引用以後vs.net會在客戶端也儲存一個dll,可能大家會問這樣如果對遠端物件的修改是不是會很麻煩?其實不麻煩,對專案編譯一次vs.net會重新複製dll。
然後直接執行客戶端會出現“目標主機拒絕”的異常,也說明了通道沒有開啟
執行服務端再執行客戶端出現“找不到程式集RemoteObject”!回頭想想可以發現我們並在服務端對RemoteObject新增引用,編譯的時候通過是因為這個時候並沒有用到遠端物件,大家可能不理解執行服務端的時候也通過?這是因為沒有這個時候還沒有啟用遠端物件。理所當然,對服務端要新增引用遠端物件,畢竟我們的物件是要靠遠端承載的。
現在再先後執行服務端程式和客戶端程式,客戶端程式顯示3,測試成功。
四、結束語
我們通過一個簡單的例子實現了最簡單的remoting,對其實質沒有做任何介紹,我想通過例子入門才是最簡單的。
優點:
1、能讓我們進行分散式開發
2、Tcp通道的Remoting速度非常快
3、雖然是遠端的,但是非常接近於本地呼叫物件
4、可以做到保持物件的狀態
5、沒有應用程式限制,可以是控制檯,winform,iis,windows服務承載遠端物件
缺點:
1、非標準的應用因此有平臺限制
2、脫離iis的話需要有自己的安全機制
二、Remoting和Web服務的區別?
ASP.NET Web 服務基礎結構通過將 SOAP 訊息對映到方法呼叫,為 Web 服務提供了簡單的 API。通過提供一種非常簡單的程式設計模型(基於將 SOAP 訊息交換對映到方法呼叫),它實現了此機制。ASP.NET Web 服務的客戶端不需要了解用於建立它們的平臺、物件模型或程式語言。而服務也不需要了解向它們傳送訊息的客戶端。唯一的要求是:雙方都要認可正在建立和使用的 SOAP 訊息的格式,該格式是由使用 WSDL 和 XML 架構 (XSD) 表示的 Web 服務合約定義來定義的。
. NET Remoting 為分散式物件提供了一個基礎結構。它使用既靈活又可擴充套件的管線向遠端程式提供 .NET 的完全物件語義。ASP.NET Web 服務基於訊息傳遞提供非常簡單的程式設計模型,而 .NET Remoting 提供較為複雜的功能,包括支援通過值或引用傳遞物件、回撥,以及多物件啟用和生命週期管理策略等。要使用 .NET Remoting,客戶端需要了解所有這些詳細資訊,簡而言之,需要使用 .NET 建立客戶端。.NET Remoting 管線還支援 SOAP 訊息,但必須注意這並沒有改變其對客戶端的要求。如果 Remoting 端點提供 .NET 專用的物件語義,不管是否通過 SOAP,客戶端必須理解它們。
三、最簡單的Remoting的例子
1、遠端物件:
建立類庫專案:RemoteObject
using System;
namespace RemoteObject
{
public class MyObject:MarshalByRefObject
{
public int Add(int a,int b)
{
return a+b;
}
}
}
namespace RemoteObject
{
public class MyObject:MarshalByRefObject
{
public int Add(int a,int b)
{
return a+b;
}
}
}
2、服務端
建立控制檯專案:RemoteServer
using System;
using System.Runtime.Remoting;
namespace RemoteServer
{
class MyServer
{
[STAThread]
static void Main(string[] args)
{
RemotingConfiguration.Configure("RemoteServer.exe.config");
Console.ReadLine();
}
}
}
using System.Runtime.Remoting;
namespace RemoteServer
{
class MyServer
{
[STAThread]
static void Main(string[] args)
{
RemotingConfiguration.Configure("RemoteServer.exe.config");
Console.ReadLine();
}
}
}
建立配置檔案:app.config
<configuration>
<system.runtime.remoting>
<application name="RemoteServer">
<service>
<wellknown type="RemoteObject.MyObject,RemoteObject" objectUri="RemoteObject.MyObject"
mode="Singleton" />
</service>
<channels>
<channel ref="tcp" port="9999"/>
</channels>
</application>
</system.runtime.remoting>
</configuration>
<system.runtime.remoting>
<application name="RemoteServer">
<service>
<wellknown type="RemoteObject.MyObject,RemoteObject" objectUri="RemoteObject.MyObject"
mode="Singleton" />
</service>
<channels>
<channel ref="tcp" port="9999"/>
</channels>
</application>
</system.runtime.remoting>
</configuration>
3、客戶端:
建立控制檯專案:RemoteClient
using System;
namespace RemoteClient
{
class MyClient
{
[STAThread]
static void Main(string[] args)
{
RemoteObject.MyObject app = (RemoteObject.MyObject)Activator.GetObject(typeof(RemoteObject.MyObject),System.Configuration.ConfigurationSettings.AppSettings["ServiceURL"]);
Console.WriteLine(app.Add(1,2));
Console.ReadLine();
}
}
}
namespace RemoteClient
{
class MyClient
{
[STAThread]
static void Main(string[] args)
{
RemoteObject.MyObject app = (RemoteObject.MyObject)Activator.GetObject(typeof(RemoteObject.MyObject),System.Configuration.ConfigurationSettings.AppSettings["ServiceURL"]);
Console.WriteLine(app.Add(1,2));
Console.ReadLine();
}
}
}
建立配置檔案:app.config
<configuration>
<appSettings>
<add key="ServiceURL" value="tcp://localhost:9999/RemoteObject.MyObject"/>
</appSettings>
</configuration>
<appSettings>
<add key="ServiceURL" value="tcp://localhost:9999/RemoteObject.MyObject"/>
</appSettings>
</configuration>
4、測試
在最後編譯的時候會發現編譯報錯:
1、找不到app.Add()
2、找不到RemoteObject
這是因為客戶端RemoteClient沒有新增RemoteObject的引用,編譯器並不知道遠端物件存在哪些成員所以報錯,新增引用以後vs.net會在客戶端也儲存一個dll,可能大家會問這樣如果對遠端物件的修改是不是會很麻煩?其實不麻煩,對專案編譯一次vs.net會重新複製dll。
然後直接執行客戶端會出現“目標主機拒絕”的異常,也說明了通道沒有開啟
執行服務端再執行客戶端出現“找不到程式集RemoteObject”!回頭想想可以發現我們並在服務端對RemoteObject新增引用,編譯的時候通過是因為這個時候並沒有用到遠端物件,大家可能不理解執行服務端的時候也通過?這是因為沒有這個時候還沒有啟用遠端物件。理所當然,對服務端要新增引用遠端物件,畢竟我們的物件是要靠遠端承載的。
現在再先後執行服務端程式和客戶端程式,客戶端程式顯示3,測試成功。
四、結束語
我們通過一個簡單的例子實現了最簡單的remoting,對其實質沒有做任何介紹,我想通過例子入門才是最簡單的。
相關文章
- ASP.NET Web 服務、企業服務和 .NET Remoting 的效能ASP.NETWebREM
- WCF、Net remoting、Web service概念及區別REMWeb
- WEB 容器、WEB服務和應用伺服器的區別與聯絡Web伺服器
- .net 安裝remoting服務REM
- 服務的熔斷和降級的區別
- bbossaop遠端服務介紹-點對點遠端服務呼叫和組播服務呼叫的區別
- 領域服務和應用服務的差別?
- WCF 服務應用程式與 服務庫之間的區別
- TCP socket和web socket的區別TCPWeb
- Remoting服務端和客戶端程式該這樣模式來寫REM服務端客戶端模式
- 抖音本地生活傳統服務商和系統服務商有什麼區別?
- .Net Remoting服務端與客戶端呼叫示例REM服務端客戶端
- web app和native app的區別WebAPP
- Web1.0、Web2.0 和 Web3.0 的區別Web
- SAP ABAP OData 服務裡 EntityType 和 EntitySet 的區別試讀版
- SAP ABAP OData 服務的 $count 和 $inlinecount 兩個操作的區別inline
- 本地事務和分散式事務的區別分散式
- 保障Web服務的安全Web
- app後端和web後端的區別APP後端Web
- 轉享:Ehcache 服務和RESTful Web ServicesRESTWeb
- AngularJS服務中serivce,factory,provider的區別AngularJSIDE
- 【HMS Core】使用機器學習服務和搜尋服務識別植物機器學習
- web 開發裡 SSR,CSR 和 SSG 的區別Web
- 《web-Mail服務的搭建》WebAI
- soap協議的web服務協議Web
- 使用nodejs和express搭建http web服務NodeJSExpressHTTPWeb
- 搭建 Restful Web 服務RESTWeb
- Linux web服務LinuxWeb
- Web設計師和Web開發者之間的區別是什麼?Web
- 服務、微服務與無伺服器之函式的區別? - Tom Nolle微服務伺服器函式
- Vue教程00:MVC、MVP、MVVM模式的區別,服務端渲染與客戶端渲染的區別VueMVCMVPMVVM模式服務端客戶端
- Nginx服務系列——靜態資源web服務NginxWeb
- oracle11G與12C新增服務的區別Oracle
- VS2013建立和呼叫Web服務Web
- SOA架構和微服務架構的區別架構微服務
- Android程式(Processes)和任務(tasks)的區別Android
- ../和./和/的區別
- Web網站服務(二)Web網站