青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

twzheng's cppblog

『站在風口浪尖緊握住鼠標旋轉!』 http://www.cnblogs.com/twzheng

  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
  136 隨筆 :: 78 文章 :: 353 評論 :: 0 Trackbacks
.NET Remoting
By Mark Strawmyer 

[源] http://www.developer.com/net/cplus/article.php/10919_1479761_1

The last two Nuts and Bolts articles focused on database related topics. This month we'll change gears and focus on something different. The focus of this month's article will be .NET remoting. We'll discuss what is .NET Remoting, how it compares to DCOM and Web services, and go through an example.

What is .NET Remoting?

.NET Remoting is an enabler for application communication. It is a generic system for different applications to use to communicate with one another. .NET objects are exposed to remote processes, thus allowing interprocess communication. The applications can be located on the same computer, different computers on the same network, or even computers across separate networks.

.NET Remoting versus Distributed COM

In the past interprocess communication between applications was handled through Distributed COM, or DCOM. DCOM works well and the performance is adequate when applications exist on computers of similar type on the same network. However, DCOM has its drawbacks in the Internet connected world. DCOM relies on a proprietary binary protocol that not all object models support, which hinders interoperability across platforms. In addition, have you tried to get DCOM to work through a firewall? DCOM wants to communicate over a range of ports that are typically blocked by firewalls. There are a ways to get it to work, but they either decrease the effectiveness of the firewall (why bother to even have the firewall if you open up a ton of ports on it), or require you to get a firewall that allows support for binary traffic over port 80.

.NET Remoting eliminates the difficulties of DCOM by supporting different transport protocol formats and communication protocols. This allows .NET Remoting to be adaptable to the network environment in which it is being used.

.NET Remoting versus Web Services

Unless you have been living in a cave, or are way behind in your reading, you have probably read something about Web services. When you read the description of .NET Remoting it may remind you a lot of what you're read about Web services. That is because Web services fall under the umbrella of .NET Remoting, but have a simplified programming model and are intended for a wide target audience.

Web services involve allowing applications to exchange messages in a way that is platform, object model, and programming language independent. Web services are stateless and know nothing about the client that is making the request. The clients communicate by transferring messages back and forth in a specific format known as the Simple Object Access Protocol, or SOAP. (Want to get some funny looks in the hallway? Stand around in the hallway near the marketing department with your colleagues and discuss the benefits of using SOAP).

The following list outlines some of the major differences between .NET Remoting and Web services that will help you to decide when to use one or the other:

  • ASP.NET based Web services can only be accessed over HTTP. .NET Remoting can be used across any protocol.
  • Web services work in a stateless environment where each request results in a new object created to service the request. .NET Remoting supports state management options and can correlate multiple calls from the same client and support callbacks.
  • Web services serialize objects through XML contained in the SOAP messages and can thus only handle items that can be fully expressed in XML. .NET Remoting relies on the existence of the common language runtime assemblies that contain information about data types. This limits the information that must be passed about an object and allows objects to be passed by value or by reference.
  • Web services support interoperability across platforms and are good for heterogeneous environments. .NET Remoting requires the clients be built using .NET, or another framework that supports .NET Remoting, which means a homogeneous environment.

Channels

Remote objects are accessed through Channels. Channels physically transport the messages to and from remote objects. There are two existing channels TcpChannel and HttpChannel. Their names give away the protocols that they use. In addition, the TcpChannel or HttpChannel can be extended, or a new channel created if you determine the existing channels do not meet your needs.

Create a Remotable Object

 

A remotable object is nothing more than an object that inherits from MarshalByRefObject. The following sample demonstrates a simple class to expose the omnipresent hello world. This object exposes a single method HelloWorld that will return a string. The only values that can be returned from methods are the classes in the .NET Framework that are serializable such as string and DataSet. In addition, if you need to return a user-defined object then the object needs to be marked as serializable.

 

Create a new C# class library project. Add a class called SampleObject and put in the following code. Add a reference to System.Runtime.Remoting in the project, otherwise the TcpChannel will not be found. Compile the class to make sure you have everything correct.

using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
namespace CodeGuru.Remoting
{
/// <remarks>
/// Sample object to demonstrate the use of .NET Remoting.
/// </remarks>
public class SampleObject : MarshalByRefObject
{
/// <summary>
/// Constructor
/// </summary> 
public SampleObject()
{
}

/// <summary>
/// Return a hello message
/// </summary>
/// <returns>Hello world message</returns>
public string HelloWorld()
{
return "Hello World!";
}
}
}

Create a Server To Expose the Remotable Object

We need to create a server object that will act as a listener to accept remote object requests. For this example we will use the TCP/IP channel. We first create an instance of the channel and then register it for use by clients at a specific port. The service can be registered as WellKnownObjectMode.SingleCall, which results in a new instance of the object for each client, or as WellKnownObjectMode.Singleton, which results in one instance of the object used for all clients.

It is not necessary to create the server listener if you are planning to use IIS. For obvious reasons, IIS only supports the use of the HttpChannel. Create a virtual directory for your application and then put code to register your service in the Application_Start event.

For our example, we'll go ahead and create a server listener in case you don't have IIS. Since the service needs to be bound to an available port, for our example I chose 8080, which is a port that I know to be unused on my computer. You may need to choose a different port depending upon what ports you have available. To see a list of the used ports on your computer open a command prompt and issue the command "netstat --a". It may produce a long listing so make sure the command prompt buffer sizes are set to allow scrolling. Compile the class to make sure you have everything correct.

Create a new C# console application project. Add a class called SampleServer and paste in the following code. Add a reference to System.Runtime.Remoting in the project, otherwise the TcpChannel will not be found. In addition, add a reference to the project containing the SampleObject, otherwise the code will not compile because it won't know how to find a reference to SampleObject.

using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
namespace CodeGuru.Remoting
{
/// <remarks>
/// Sample server to demonstrate the use of .NET Remoting.
/// </remarks>
public class SampleServer
{
public static int Main(string [] args)
{
// Create an instance of a channel
TcpChannel channel = new TcpChannel(8080);
ChannelServices.RegisterChannel(channel);
// Register as an available service with the name HelloWorld
RemotingConfiguration.RegisterWellKnownServiceType(
typeof(SampleObject),
"HelloWorld",
WellKnownObjectMode.SingleCall );
System.Console.WriteLine("Press the enter key to exit...");
System.Console.ReadLine();
return 0;
}
}
}

Create a Client To Use the Remotable Object

Now that we have our remotable object and a server object to listen for requests, let's create a client to use it. Our client will be very simple. It will connect to the server, create an instance of the object using the server, and then execute the HelloWorld method.

Create a new C# console application project. Add a class called SampleClient and paste in the following code. Add a reference to System.Runtime.Remoting in the project, otherwise the TcpChannel will not be found. In addition, add a reference to the project containing the SampleObject, otherwise the code will not compile because it won't know how to find a reference to SampleObject. Compile the class to make sure you have everything correct.

using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
namespace CodeGuru.Remoting
{
/// <remarks>
/// Sample client to demonstrate the use of .NET Remoting.
/// </remarks>
public class SampleClient
{
public static int Main(string [] args)
{
// Create a channel for communicating w/ the remote object
// Notice no port is specified on the client
TcpChannel chan = new TcpChannel();
ChannelServices.RegisterChannel(chan);
// Create an instance of the remote object
SampleObject obj = (SampleObject) Activator.GetObject(
typeof(CodeGuru.Remoting.SampleObject),
"tcp://localhost:8080/HelloWorld" );
// Use the object
if( obj.Equals(null) )
{
System.Console.WriteLine("Error: unable to locate server");
}
else
{
Console.WriteLine(obj.HelloWorld());
}
return 0;
}
}
}

Test the Remoting Sample

Once you have created the projects and successfully compiled each of them you are ready to try it out. Assuming you chose a free TCP/IP port for the service, start the server executable. After the server successfully starts it will result in a console window being displayed with the message "Press the enter key to exit". The server is listening so you are now ready to run the client. Executing the client should result in "Hello World!" being displayed in a separate console window. The client window will then close while the server remains open and available.

If you have multiple computers available to you on a network you could execute the server on one machine and the client on another just to prove to yourself that it really is remoting. In order to run on separate machines you would need to change the reference to localhost in the sample client to point to the appropriate location.

Summary

.NET Remoting is a powerful way to enable interprocess communication. It is more complicated to program against than Web services. You need to decide for yourself whether your standard architecture is to use .NET Remoting or Web services.

Future Columns

The next column will be on the use of encryption in the .NET framework. We'll take a look at some of the encryption algorithms available in the framework and ways to use them. If you have a particular topic in mind please email me at mstrawmyer@crowechizek.com

About the Author

Mark Strawmyer, MCSD, MCSE (NT4/W2K), MCDBA is a Senior Architect of .NET applications for large and mid-size organizations. Mark is a technology leader with Crowe Chizek in Indianapolis, Indiana. He specializes in architecture, design and development of Microsoft-based solutions. You can reach Mark at mstrawmyer@crowechizek.com.

posted on 2007-05-14 00:30 譚文政 閱讀(716) 評論(0)  編輯 收藏 引用 所屬分類: vc++.net
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            你懂的视频一区二区| 亚洲第一精品夜夜躁人人爽| 亚洲国产mv| 欧美精品一二三| 亚洲少妇一区| 性久久久久久久久| 亚洲国产欧美日韩| 亚洲国产女人aaa毛片在线| 欧美精品激情在线观看| 亚洲欧美影音先锋| 久久国产精品久久国产精品| 亚洲国产你懂的| 日韩一级成人av| 国产视频一区在线观看一区免费| 久久综合九色综合欧美狠狠| 欧美激情精品久久久久| 亚洲午夜精品国产| 久久国产精品99久久久久久老狼| 亚洲大胆人体视频| 亚洲裸体在线观看| 国产三级欧美三级| 亚洲精品社区| 国产乱码精品一区二区三| 欧美sm视频| 国产精品久久久久久久久免费樱桃| 久久精品国产亚洲一区二区| 欧美成年人视频网站欧美| 亚洲视频欧美在线| 欧美一区二区三区四区在线观看| 在线亚洲观看| 这里只有视频精品| 亚洲欧美日韩在线一区| 国产欧美一区二区精品性色| 欧美激情在线播放| 国产日韩一区二区| 日韩午夜激情| 最新日韩在线视频| 欧美一级午夜免费电影| 一区二区三区精品| 男人插女人欧美| 欧美在线播放视频| 欧美午夜无遮挡| 麻豆国产精品777777在线| 国产精品久久久久久一区二区三区| 欧美成人激情视频| 国产亚洲一级高清| 亚洲欧美国产高清va在线播| 一区二区三区四区蜜桃| 久热爱精品视频线路一| 久久久国产亚洲精品| 国产精品日本一区二区| 日韩一级成人av| 制服诱惑一区二区| 欧美日韩精品一本二本三本| 欧美激情第9页| 亚洲第一精品久久忘忧草社区| 性色av一区二区三区在线观看 | 欧美怡红院视频一区二区三区| 一个色综合av| 欧美伦理91| 99re在线精品| 99热在线精品观看| 欧美日韩精品二区第二页| 亚洲欧洲精品一区| 日韩午夜三级在线| 欧美日本簧片| 夜夜嗨av一区二区三区| 一区二区三区成人精品| 欧美色区777第一页| 中日韩高清电影网| 午夜国产不卡在线观看视频| 国产精品国产三级国产普通话三级 | 亚洲一区二区视频在线观看| 亚洲一区亚洲二区| 国产精品免费aⅴ片在线观看| 亚洲网址在线| 久久久久久久成人| 亚洲国产精品欧美一二99| 欧美岛国在线观看| 中文有码久久| 久久精品一区二区三区不卡牛牛 | 国内成人在线| 久久久精品国产免大香伊| 免费中文字幕日韩欧美| 日韩午夜在线观看视频| 欧美天天视频| 欧美在线二区| 亚洲国产高清在线| 欧美日韩国产成人在线免费| 91久久精品一区二区别| 欧美多人爱爱视频网站| 日韩亚洲在线观看| 欧美中文日韩| 亚洲另类一区二区| 国产精品国码视频| 久久精品在线视频| 99热在线精品观看| 久久久亚洲影院你懂的| 亚洲精品一区二区三区不| 欧美三级电影网| 久久久噜噜噜久久久| 亚洲黄色尤物视频| 欧美在线观看天堂一区二区三区| 在线观看的日韩av| 国产精品免费看| 欧美成人免费网站| 欧美尤物巨大精品爽| 亚洲精品乱码久久久久久蜜桃麻豆| 亚洲免费视频中文字幕| 在线免费一区三区| 国产精品视频在线观看| 欧美r片在线| 欧美亚洲一区在线| 一区二区黄色| 亚洲国产日韩欧美在线动漫| 久久久久久成人| 亚洲欧美国产77777| 亚洲精品一区在线观看| 一区二区三区在线视频播放 | 久久久另类综合| 亚洲自拍偷拍网址| 一个色综合导航| 91久久精品国产91性色| 欧美**人妖| 久久久久久日产精品| 欧美在线二区| 亚洲免费在线精品一区| 一区二区三区日韩精品视频| 亚洲第一福利社区| 好看的日韩av电影| 国产一区三区三区| 国产一区在线免费观看| 国产乱人伦精品一区二区| 国产精品wwwwww| 欧美日韩国产色视频| 欧美日韩hd| 欧美喷潮久久久xxxxx| 欧美mv日韩mv国产网站| 久久欧美肥婆一二区| 久久久久网站| 老司机成人在线视频| 久久综合一区| 免费看亚洲片| 欧美二区在线观看| 欧美精品一区二区在线播放| 欧美激情精品久久久久久大尺度| 欧美成人午夜影院| 欧美激情欧美激情在线五月| 欧美日产一区二区三区在线观看| 欧美精品一区二区精品网| 欧美日本乱大交xxxxx| 欧美亚韩一区| 国产亚洲福利社区一区| 国模吧视频一区| 亚洲国产精品va在线观看黑人| 亚洲高清不卡一区| 日韩一区二区精品葵司在线| 亚洲亚洲精品在线观看| 欧美一区午夜精品| 农村妇女精品| 99精品免费视频| 午夜亚洲精品| 牛夜精品久久久久久久99黑人 | 国产精品羞羞答答xxdd| 一区二区三区视频在线观看| 亚洲私人影院| 久久激情视频| 亚洲第一中文字幕在线观看| 亚洲破处大片| 亚洲尤物在线视频观看| 久久久亚洲午夜电影| 欧美日韩国产黄| 国产日韩欧美二区| 91久久精品国产| 午夜视频精品| 欧美国产精品人人做人人爱| 在线视频中文亚洲| 久久久一区二区三区| 国产精品jvid在线观看蜜臀| 狠狠色狠狠色综合| 亚洲丝袜av一区| 牛牛影视久久网| 亚洲欧美激情诱惑| 欧美高清不卡| 好男人免费精品视频| 亚洲午夜免费福利视频| 欧美77777| 欧美一区综合| 欧美日韩在线播放一区二区| 在线精品视频在线观看高清| 亚洲特级毛片| 亚洲第一搞黄网站| 久久久久国产精品人| 国产精品视频久久久| 一本久久综合亚洲鲁鲁五月天| 久久综合九色99| 亚洲在线中文字幕| 欧美日韩一区二区三区四区五区| 亚洲成色最大综合在线| 久久成人精品|