中文字幕人妻中文_99精品欧美一区二区三区综合在线_精品久久久久一区二区_色月丁香_免费福利在线视频_欧美大片免费观看网址_国产伦精品一区二区三区在线播放_污污污污污污www网站免费_久久月本道色综合久久_色69激情爱久久_尹人香蕉久久99天天拍_国产美女www_亚洲国产精品无码7777一线_五月婷婷六月激情_看免费一级片_精品久久久久久成人av_在线色亚洲_女人另类性混交zo_国产精品青青在线观看爽香蕉_人人澡人人添人人爽一区二区

主頁 > 知識(shí)庫 > Microsoft .Net Remoting系列教程之一:.Net Remoting基礎(chǔ)篇

Microsoft .Net Remoting系列教程之一:.Net Remoting基礎(chǔ)篇

熱門標(biāo)簽:網(wǎng)絡(luò)電話外呼系統(tǒng)上海 蘇州如何辦理400電話 400電話辦理怎么樣 百應(yīng)電話機(jī)器人外呼系統(tǒng) 西寧呼叫中心外呼系統(tǒng)線路商 地圖標(biāo)注軟件免費(fèi)下載 外呼電話機(jī)器人成本 臨沂智能電話機(jī)器人加盟 聯(lián)通官網(wǎng)400電話辦理

一、Remoting基礎(chǔ)

  什么是Remoting,簡而言之,我們可以將其看作是一種分布式處理方式。從微軟的產(chǎn)品角度來看,可以說Remoting就是DCOM的一種升級(jí),它改善了很多功能,并極好的融合到.Net平臺(tái)下。Microsoft .NET Remoting 提供了一種允許對(duì)象通過應(yīng)用程序域與另一對(duì)象進(jìn)行交互的框架。這也正是我們使用Remoting的原因。為什么呢?在Windows操作系統(tǒng)中,是將應(yīng)用程序分離為單獨(dú)的進(jìn)程。這個(gè)進(jìn)程形成了應(yīng)用程序代碼和數(shù)據(jù)周圍的一道邊界。如果不采用進(jìn)程間通信(RPC)機(jī)制,則在一個(gè)進(jìn)程中執(zhí)行的代碼就不能訪問另一進(jìn)程。這是一種操作系統(tǒng)對(duì)應(yīng)用程序的保護(hù)機(jī)制。然而在某些情況下,我們需要跨過應(yīng)用程序域,與另外的應(yīng)用程序域進(jìn)行通信,即穿越邊界。

  在Remoting中是通過通道(channel)來實(shí)現(xiàn)兩個(gè)應(yīng)用程序域之間對(duì)象的通信的。如圖所示:

  首先,客戶端通過Remoting,訪問通道以獲得服務(wù)端對(duì)象,再通過代理解析為客戶端對(duì)象。這就提供一種可能性,即以服務(wù)的方式來發(fā)布服務(wù)器對(duì)象。遠(yuǎn)程對(duì)象代碼可以運(yùn)行在服務(wù)器上(如服務(wù)器激活的對(duì)象和客戶端激活的對(duì)象),然后客戶端再通過Remoting連接服務(wù)器,獲得該服務(wù)對(duì)象并通過序列化在客戶端運(yùn)行。

  在Remoting中,對(duì)于要傳遞的對(duì)象,設(shè)計(jì)者除了需要了解通道的類型和端口號(hào)之外,無需再了解數(shù)據(jù)包的格式。但必須注意的是,客戶端在獲取服務(wù)器端對(duì)象時(shí),并不是獲得實(shí)際的服務(wù)端對(duì)象,而是獲得它的引用。這既保證了客戶端和服務(wù)器端有關(guān)對(duì)象的松散耦合,同時(shí)也優(yōu)化了通信的性能。

1、Remoting的兩種通道

  Remoting的通道主要有兩種:Tcp和Http。在.Net中,System.Runtime.Remoting.Channel中定義了IChannel接口。IChannel接口包括了TcpChannel通道類型和Http通道類型。它們分別對(duì)應(yīng)Remoting通道的這兩種類型。

  TcpChannel類型放在名字空間System.Runtime.Remoting.Channel.Tcp中。Tcp通道提供了基于Socket的傳輸工具,使用Tcp協(xié)議來跨越Remoting邊界傳輸序列化的消息流。TcpChannel類型默認(rèn)使用二進(jìn)制格式序列化消息對(duì)象,因此它具有更高的傳輸性能。HttpChannel類型放在名字空間System.Runtime.Remoting.Channel.Http中。它提供了一種使用Http協(xié)議,使其能在Internet上穿越防火墻傳輸序列化消息流。默認(rèn)情況下,HttpChannel類型使用Soap格式序列化消息對(duì)象,因此它具有更好的互操作性。通常在局域網(wǎng)內(nèi),我們更多地使用TcpChannel;如果要穿越防火墻,則使用HttpChannel。

2、遠(yuǎn)程對(duì)象的激活方式

  在訪問遠(yuǎn)程類型的一個(gè)對(duì)象實(shí)例之前,必須通過一個(gè)名為Activation的進(jìn)程創(chuàng)建它并進(jìn)行初始化。這種客戶端通過通道來創(chuàng)建遠(yuǎn)程對(duì)象,稱為對(duì)象的激活。在Remoting中,遠(yuǎn)程對(duì)象的激活分為兩大類:服務(wù)器端激活和客戶端激活。

  (1) 服務(wù)器端激活,又叫做WellKnow方式,很多又翻譯為知名對(duì)象。為什么稱為知名對(duì)象激活模式呢?是因?yàn)榉?wù)器應(yīng)用程序在激活對(duì)象實(shí)例之前會(huì)在一個(gè)眾所周知的統(tǒng)一資源標(biāo)識(shí)符(URI)上來發(fā)布這個(gè)類型。然后該服務(wù)器進(jìn)程會(huì)為此類型配置一個(gè)WellKnown對(duì)象,并根據(jù)指定的端口或地址來發(fā)布對(duì)象。.Net Remoting把服務(wù)器端激活又分為SingleTon模式和SingleCall模式兩種。

  SingleTon模式:此為有狀態(tài)模式。如果設(shè)置為SingleTon激活方式,則Remoting將為所有客戶端建立同一個(gè)對(duì)象實(shí)例。當(dāng)對(duì)象處于活動(dòng)狀態(tài)時(shí),SingleTon實(shí)例會(huì)處理所有后來的客戶端訪問請(qǐng)求,而不管它們是同一個(gè)客戶端,還是其他客戶端。SingleTon實(shí)例將在方法調(diào)用中一直維持其狀態(tài)。舉例來說,如果一個(gè)遠(yuǎn)程對(duì)象有一個(gè)累加方法(i=0;++i),被多個(gè)客戶端(例如兩個(gè))調(diào)用。如果設(shè)置為SingleTon方式,則第一個(gè)客戶獲得值為1,第二個(gè)客戶獲得值為2,因?yàn)樗麄儷@得的對(duì)象實(shí)例是相同的。如果熟悉Asp.Net的狀態(tài)管理,我們可以認(rèn)為它是一種Application狀態(tài)。

  SingleCall模式:SingleCall是一種無狀態(tài)模式。一旦設(shè)置為SingleCall模式,則當(dāng)客戶端調(diào)用遠(yuǎn)程對(duì)象的方法時(shí),Remoting會(huì)為每一個(gè)客戶端建立一個(gè)遠(yuǎn)程對(duì)象實(shí)例,至于對(duì)象實(shí)例的銷毀則是由GC自動(dòng)管理的。同上一個(gè)例子而言,則訪問遠(yuǎn)程對(duì)象的兩個(gè)客戶獲得的都是1。我們?nèi)匀豢梢越梃bAsp.Net的狀態(tài)管理,認(rèn)為它是一種Session狀態(tài)。

  (2) 客戶端激活。與WellKnown模式不同,Remoting在激活每個(gè)對(duì)象實(shí)例的時(shí)候,會(huì)給每個(gè)客戶端激活的類型指派一個(gè)URI。客戶端激活模式一旦獲得客戶端的請(qǐng)求,將為每一個(gè)客戶端都建立一個(gè)實(shí)例引用。SingleCall模式和客戶端激活模式是有區(qū)別的:首先,對(duì)象實(shí)例創(chuàng)建的時(shí)間不一樣。客戶端激活方式是客戶一旦發(fā)出調(diào)用的請(qǐng)求,就實(shí)例化;而SingleCall則是要等到調(diào)用對(duì)象方法時(shí)再創(chuàng)建。其次,SingleCall模式激活的對(duì)象是無狀態(tài)的,對(duì)象生命期的管理是由GC管理的,而客戶端激活的對(duì)象則有狀態(tài),其生命周期可自定義。其三,兩種激活模式在服務(wù)器端和客戶端實(shí)現(xiàn)的方法不一樣。尤其是在客戶端,SingleCall模式是由GetObject()來激活,它調(diào)用對(duì)象默認(rèn)的構(gòu)造函數(shù)。而客戶端激活模式,則通過CreateInstance()來激活,它可以傳遞參數(shù),所以可以調(diào)用自定義的構(gòu)造函數(shù)來創(chuàng)建實(shí)例。

二、遠(yuǎn)程對(duì)象的定義

  前面講到,客戶端在獲取服務(wù)器端對(duì)象時(shí),并不是獲得實(shí)際的服務(wù)端對(duì)象,而是獲得它的引用。因此在Remoting中,對(duì)于遠(yuǎn)程對(duì)象有一些必須的定義規(guī)范要遵循。

  由于Remoting傳遞的對(duì)象是以引用的方式,因此所傳遞的遠(yuǎn)程對(duì)象類必須繼承MarshalByRefObject。MSDN對(duì)MarshalByRefObject的說明是:MarshalByRefObject 是那些通過使用代理交換消息來跨越應(yīng)用程序域邊界進(jìn)行通信的對(duì)象的基類。不是從 MarshalByRefObject 繼承的對(duì)象會(huì)以隱式方式按值封送。當(dāng)遠(yuǎn)程應(yīng)用程序引用一個(gè)按值封送的對(duì)象時(shí),將跨越遠(yuǎn)程處理邊界傳遞該對(duì)象的副本。因?yàn)槟M褂么矸椒ǘ皇歉北痉椒ㄟM(jìn)行通信,因此需要繼承MarshallByRefObject。

以下是一個(gè)遠(yuǎn)程對(duì)象類的定義:

public class ServerObject:MarshalByRefObject
{
 public Person GetPersonInfo(string name,string sex,int age)
 {
 Person person = new Person();
 person.Name = name;
 person.Sex = sex;
 person.Age = age;
 return person;
 }
}

  這個(gè)類只實(shí)現(xiàn)了最簡單的方法,就是設(shè)置一個(gè)人的基本信息,并返回一個(gè)Person類對(duì)象。注意這里返回的Person類。由于這里所傳遞的Person則是以傳值的方式來完成的,而Remoting要求必須是引用的對(duì)象,所以必須將Person類序列化。

  因此,在Remoting中的遠(yuǎn)程對(duì)象中,如果還要調(diào)用或傳遞某個(gè)對(duì)象,例如類,或者結(jié)構(gòu),則該類或結(jié)構(gòu)則必須實(shí)現(xiàn)串行化

Attribute[SerializableAttribute]:
[Serializable]
public class Person
{
 public Person()
 {
 
 }

 private string name;
 private string sex;
 private int age;

 public string Name
 {
 get {return name;}
 set {name = value;}
 }

 public string Sex
 {
 get {return sex;}
 set {sex = value;}
 }

 public int Age
 {
 get {return age;}
 set {age = value;}
 }
}

  將該遠(yuǎn)程對(duì)象以類庫的方式編譯成Dll。這個(gè)Dll將分別放在服務(wù)器端和客戶端,以添加引用。

  在Remoting中能夠傳遞的遠(yuǎn)程對(duì)象可以是各種類型,包括復(fù)雜的DataSet對(duì)象,只要它能夠被序列化。遠(yuǎn)程對(duì)象也可以包含事件,但服務(wù)器端對(duì)于事件的處理比較特殊,我將在本系列之三中介紹。

三、服務(wù)器端

根據(jù)第一部分所述,根據(jù)激活模式的不同,通道類型的不同服務(wù)器端的實(shí)現(xiàn)方式也有所不同。大體上說,服務(wù)器端應(yīng)分為三步:

1、注冊(cè)通道

  要跨越應(yīng)用程序域進(jìn)行通信,必須實(shí)現(xiàn)通道。如前所述,Remoting提供了IChannel接口,分別包含TcpChannel和HttpChannel兩種類型的通道。這兩種類型除了性能和序列化數(shù)據(jù)的格式不同外,實(shí)現(xiàn)的方式完全一致,因此下面我們就以TcpChannel為例。

  注冊(cè)TcpChannel,首先要在項(xiàng)目中添加引用“System.Runtime.Remoting”,然后using名字空間:System.Runtime.Remoting.Channel.Tcp。代碼如下:

TcpChannel channel = new TcpChannel(8080);
ChannelServices.RegisterChannel(channel);

在實(shí)例化通道對(duì)象時(shí),將端口號(hào)作為參數(shù)傳遞。然后再調(diào)用靜態(tài)方法RegisterChannel()來注冊(cè)該通道對(duì)象即可。

2、注冊(cè)遠(yuǎn)程對(duì)象

注冊(cè)了通道后,要能激活遠(yuǎn)程對(duì)象,必須在通道中注冊(cè)該對(duì)象。根據(jù)激活模式的不同,注冊(cè)對(duì)象的方法也不同。

(1) SingleTon模式

對(duì)于WellKnown對(duì)象,可以通過靜態(tài)方法RemotingConfiguration.RegisterWellKnownServiceType()來實(shí)現(xiàn):

RemotingConfiguration.RegisterWellKnownServiceType(
 typeof(ServerRemoteObject.ServerObject),
 "ServiceMessage",WellKnownObjectMode.SingleTon);

(2)SingleCall模式

注冊(cè)對(duì)象的方法基本上和SingleTon模式相同,只需要將枚舉參數(shù)WellKnownObjectMode改為SingleCall就可以了。

RemotingConfiguration.RegisterWellKnownServiceType(
 typeof(ServerRemoteObject.ServerObject),
 "ServiceMessage",WellKnownObjectMode.SingleCall);

(3)客戶端激活模式

對(duì)于客戶端激活模式,使用的方法又有不同,但區(qū)別不大,看了代碼就一目了然。

RemotingConfiguration.ApplicationName = "ServiceMessage";
RemotingConfiguration.RegisterActivatedServiceType(
 typeof(ServerRemoteObject.ServerObject));

  為什么要在注冊(cè)對(duì)象方法前設(shè)置ApplicationName屬性呢?其實(shí)這個(gè)屬性就是該對(duì)象的URI。對(duì)于WellKnown模式,URI是放在RegisterWellKnownServiceType()方法的參數(shù)中,當(dāng)然也可以拿出來專門對(duì)ApplicationName屬性賦值。而RegisterActivatedServiceType()方法的重載中,沒有ApplicationName的參數(shù),所以必須分開。

3、注銷通道

  如果要關(guān)閉Remoting的服務(wù),則需要注銷通道,也可以關(guān)閉對(duì)通道的監(jiān)聽。在Remoting中當(dāng)我們注冊(cè)通道的時(shí)候,就自動(dòng)開啟了通道的監(jiān)聽。而如果關(guān)閉了對(duì)通道的監(jiān)聽,則該通道就無法接受客戶端的請(qǐng)求,但通道仍然存在,如果你想再一次注冊(cè)該通道,會(huì)拋出異常。

//獲得當(dāng)前已注冊(cè)的通道;
IChannel[] channels = ChannelServices.RegisteredChannels;

//關(guān)閉指定名為MyTcp的通道;
foreach (IChannel eachChannel in channels)
{
 if (eachChannel.ChannelName == "MyTcp")
 {
 TcpChannel tcpChannel = (TcpChannel)eachChannel;

 //關(guān)閉監(jiān)聽;
 tcpChannel.StopListening(null);

 //注銷通道;
 ChannelServices.UnregisterChannel(tcpChannel);
 }
}

  代碼中,RegisterdChannel屬性獲得的是當(dāng)前已注冊(cè)的通道。在Remoting中,是允許同時(shí)注冊(cè)多個(gè)通道的,這一點(diǎn)會(huì)在后面說明。

四、客戶端

  客戶端主要做兩件事,一是注冊(cè)通道。這一點(diǎn)從圖一就可以看出,Remoting中服務(wù)器端和客戶端都必須通過通道來傳遞消息,以獲得遠(yuǎn)程對(duì)象。第二步則是獲得該遠(yuǎn)程對(duì)象。

1、注冊(cè)通道:

TcpChannel channel = new TcpChannel();
ChannelServices.RegisterChannel(channel);

  注意在客戶端實(shí)例化通道時(shí),是調(diào)用的默認(rèn)構(gòu)造函數(shù),即沒有傳遞端口號(hào)。事實(shí)上,這個(gè)端口號(hào)是缺一不可的,只不過它的指定被放在后面作為了Uri的一部分。

2、獲得遠(yuǎn)程對(duì)象。

  與服務(wù)器端相同,不同的激活模式?jīng)Q定了客戶端的實(shí)現(xiàn)方式也將不同。不過這個(gè)區(qū)別僅僅是WellKnown激活模式和客戶端激活模式之間的區(qū)別,而對(duì)于SingleTon和SingleCall模式,客戶端的實(shí)現(xiàn)完全相同。

(1) WellKnown激活模式

  要獲得服務(wù)器端的知名遠(yuǎn)程對(duì)象,可通過Activator進(jìn)程的GetObject()方法來獲得:

ServerRemoteObject.ServerObject serverObj = (ServerRemoteObject.ServerObject)Activator.GetObject(
 typeof(ServerRemoteObject.ServerObject), "tcp://localhost:8080/ServiceMessage");

  首先以WellKnown模式激活,客戶端獲得對(duì)象的方法是使用GetObject()。其中參數(shù)第一個(gè)是遠(yuǎn)程對(duì)象的類型。第二個(gè)參數(shù)就是服務(wù)器端的uri。如果是http通道,自然是用http://localhost:8080/ServiceMessage了。因?yàn)槲沂怯帽镜貦C(jī),所以這里是localhost,你可以用具體的服務(wù)器IP地址來代替它。端口必須和服務(wù)器端的端口一致。后面則是服務(wù)器定義的遠(yuǎn)程對(duì)象服務(wù)名,即ApplicationName屬性的內(nèi)容。

(2) 客戶端激活模式

  如前所述,WellKnown模式在客戶端創(chuàng)建對(duì)象時(shí),只能調(diào)用默認(rèn)的構(gòu)造函數(shù),上面的代碼就說明了這一點(diǎn),因?yàn)镚etObject()方法不能傳遞構(gòu)造函數(shù)的參數(shù)。而客戶端激活模式則可以通過自定義的構(gòu)造函數(shù)來創(chuàng)建遠(yuǎn)程對(duì)象。

客戶端激活模式有兩種方法:
1) 調(diào)用RemotingConfiguration的靜態(tài)方法RegisterActivatedClientType()。這個(gè)方法返回值為Void,它只是將遠(yuǎn)程對(duì)象注冊(cè)在客戶端而已。具體的實(shí)例化還需要調(diào)用對(duì)象類的構(gòu)造函數(shù)。

RemotingConfiguration.RegisterActivatedClientType(    
 typeof(ServerRemoteObject.ServerObject),
 "tcp://localhost:8080/ServiceMessage");
ServerRemoteObject.ServerObject serverObj = new ServerRemoteObject.ServerObject();

2) 調(diào)用進(jìn)程Activator的CreateInstance()方法。這個(gè)方法將創(chuàng)建方法參數(shù)指定類型的類對(duì)象。它與前面的GetObject()不同的是,它要在客戶端調(diào)用構(gòu)造函數(shù),而GetObject()只是獲得對(duì)象,而創(chuàng)建實(shí)例是在服務(wù)器端完成的。CreateInstance()方法有很多個(gè)重載,我著重說一下其中常用的兩個(gè)。

a、 public static object CreateInstance(Type type, object[] args, object[] activationAttributes);

參數(shù)說明:
type:要?jiǎng)?chuàng)建的對(duì)象的類型。
args :與要調(diào)用構(gòu)造函數(shù)的參數(shù)數(shù)量、順序和類型匹配的參數(shù)數(shù)組。如果 args 為空數(shù)組或空引用(Visual Basic 中為 Nothing),則調(diào)用不帶任何參數(shù)的構(gòu)造函數(shù)(默認(rèn)構(gòu)造函數(shù))。
activationAttributes :包含一個(gè)或多個(gè)可以參與激活的屬性的數(shù)組。

  這里的參數(shù)args是一個(gè)object[]數(shù)組類型。它可以傳遞要?jiǎng)?chuàng)建對(duì)象的構(gòu)造函數(shù)中的參數(shù)。從這里其實(shí)可以得到一個(gè)結(jié)論:WellKnown激活模式所傳遞的遠(yuǎn)程對(duì)象類,只能使用默認(rèn)的構(gòu)造函數(shù);而Activated模式則可以用戶自定義構(gòu)造函數(shù)。activationAttributes參數(shù)在這個(gè)方法中通常用來傳遞服務(wù)器的url。
假設(shè)我們的遠(yuǎn)程對(duì)象類ServerObject有個(gè)構(gòu)造函數(shù):

ServerObject(string pName,string pSex,int pAge)
{
 name = pName;
 sex = pSex;
 age = pAge;
}

那么實(shí)現(xiàn)的代碼是:

object[] attrs = {new UrlAttribute("tcp://localhost:8080/ServiceMessage")};
object[] objs = new object[3];
objs[0] = "wayfarer";
objs[1] = "male";
objs[2] = 28;
ServerRemoteObject.ServerObject = Activator.CreateInstance(
 typeof(ServerRemoteObject.ServerObject),objs,attrs);

可以看到,objs[]數(shù)組傳遞的就是構(gòu)造函數(shù)的參數(shù)。

b、public static ObjectHandle CreateInstance(string assemblyName, string typeName, object[] activationAttribute);

參數(shù)說明:
assemblyName :將在其中查找名為 typeName 的類型的程序集的名稱。如果 assemblyName 為空引用(Visual Basic 中為 Nothing),則搜索正在執(zhí)行的程序集。
typeName:首選類型的名稱。
activationAttributes :包含一個(gè)或多個(gè)可以參與激活的屬性的數(shù)組。

參數(shù)說明一目了然。注意這個(gè)方法返回值為ObjectHandle類型,因此代碼與前不同:

object[] attrs = {new UrlAttribute("tcp://localhost:8080/EchoMessage")};   
ObjectHandle handle = Activator.CreateInstance("ServerRemoteObject",
 "ServerRemoteObject.ServerObject",attrs);
ServerRemoteObject.ServerObject obj = (ServerRemoteObject.ServerObject)handle.Unwrap();

這個(gè)方法實(shí)際上是調(diào)用的默認(rèn)構(gòu)造函數(shù)。ObjectHandle.Unwrap()方法是返回被包裝的對(duì)象。

說明:要使用UrlAttribute,還需要在命名空間中添加:using System.Runtime.Remoting.Activation;

五、Remoting基礎(chǔ)的補(bǔ)充

  通過上面的描述,基本上已經(jīng)完成了一個(gè)最簡單的Remoting程序。這是一個(gè)標(biāo)準(zhǔn)的創(chuàng)建Remoting程序的方法,但在實(shí)際開發(fā)過程中,我們遇到的情況也許千奇百怪,如果只掌握一種所謂的“標(biāo)準(zhǔn)”,就妄想可以“一招鮮、吃遍天”,是不可能的。

1、注冊(cè)多個(gè)通道

  在Remoting中,允許同時(shí)創(chuàng)建多個(gè)通道,即根據(jù)不同的端口創(chuàng)建不同的通道。但是,Remoting要求通道的名字必須不同,因?yàn)樗脕碜鳛橥ǖ赖奈ㄒ粯?biāo)識(shí)符。雖然IChannel有ChannelName屬性,但這個(gè)屬性是只讀的。因此前面所述的創(chuàng)建通道的方法無法實(shí)現(xiàn)同時(shí)注冊(cè)多個(gè)通道的要求。

這個(gè)時(shí)候,我們必須用到System.Collection中的IDictionary接口:

注冊(cè)Tcp通道:

IDictionary tcpProp = new Hashtable();
tcpProp["name"] = "tcp9090";
tcpProp["port"] = 9090;
IChannel channel = new TcpChannel(tcpProp,
 new BinaryClientFormatterSinkProvider(),
 new BinaryServerFormatterSinkProvider());
ChannelServices.RegisterChannel(channel);

注冊(cè)Http通道:

IDictionary httpProp = new Hashtable();
httpProp["name"] = "http8080";
httpProp["port"] = 8080;
IChannel channel = new HttpChannel(httpProp,
 new SoapClientFormatterSinkProvider(),
 new SoapServerFormatterSinkProvider());
ChannelServices.RegisterChannel(channel);

在name屬性中,定義不同的通道名稱就可以了。

2、遠(yuǎn)程對(duì)象元數(shù)據(jù)相關(guān)性

  由于服務(wù)器端和客戶端都要用到遠(yuǎn)程對(duì)象,通常的方式是生成兩份完全相同的對(duì)象Dll,分別添加引用。不過為了代碼的安全性,且降低客戶端對(duì)遠(yuǎn)程對(duì)象元數(shù)據(jù)的相關(guān)性,我們有必要對(duì)這種方式進(jìn)行改動(dòng)。即在服務(wù)器端實(shí)現(xiàn)遠(yuǎn)程對(duì)象,而在客戶端則刪除這些實(shí)現(xiàn)的元數(shù)據(jù)。

由于激活模式的不同,在客戶端創(chuàng)建對(duì)象的方法也不同,所以要分離元數(shù)據(jù)的相關(guān)性,也應(yīng)分為兩種情況。

(1) WellKnown激活模式:

通過接口來實(shí)現(xiàn)。在服務(wù)器端,提供接口和具體類的實(shí)現(xiàn),而在客戶端僅提供接口:

public interface IServerObject
{
 Person GetPersonInfo(string name,string sex,int age);
}

public class ServerObject:MarshalByRefObject,IServerObject
{ ......}

注意:兩邊生成該對(duì)象程序集的名字必須相同,嚴(yán)格地說,是命名空間的名字必須相同。
          
(2) 客戶端激活模式:

  如前所述,對(duì)于客戶端激活模式,不管是使用靜態(tài)方法,還是使用CreateInstance()方法,都必須在客戶端調(diào)用構(gòu)造函數(shù)實(shí)例化對(duì)象。所以,在客戶端我們提供的遠(yuǎn)程對(duì)象,就不能只提供接口,而沒有類的實(shí)現(xiàn)。實(shí)際上,要做到與遠(yuǎn)程對(duì)象元數(shù)據(jù)的分離,可以由兩種方法供選擇:

a、利用WellKnown激活模式模擬客戶端激活模式:

方法是利用設(shè)計(jì)模式中的“抽象工廠”,下面的類圖表描述了總體解決方案:

我們?cè)诜?wù)器端的遠(yuǎn)程對(duì)象中加上抽象工廠的接口和實(shí)現(xiàn)類:

public interface IServerObject
{
 Person GetPersonInfo(string name,string sex,int age);
}

public interface IServerObjFactory
{
 IServerObject CreateInstance();  
}

public class ServerObject:MarshalByRefObject,IServerObject
{
 public Person GetPersonInfo(string name,string sex,int age)
 {
  Person person = new Person();
  person.Name = name;
  person.Sex = sex;
  person.Age = age;
  return person;
 }  
}

public class ServerObjFactory:MarshalByRefObject,IServerObjFactory
{
 public IServerObject CreateInstance()
 {
  return new ServerObject();
 }
}

然后再客戶端的遠(yuǎn)程對(duì)象中只提供工廠接口和原來的對(duì)象接口:

public interface IServerObject
{
 Person GetPersonInfo(string name,string sex,int age);
}

public interface IServerObjFactory
{
 IServerObject CreateInstance();  
}

我們用WellKnown激活模式注冊(cè)遠(yuǎn)程對(duì)象,在服務(wù)器端:

//傳遞對(duì)象;
RemotingConfiguration.RegisterWellKnownServiceType(
 typeof(ServerRemoteObject.ServerObjFactory),
 "ServiceMessage",WellKnownObjectMode.SingleCall);

注意這里注冊(cè)的不是ServerObject類對(duì)象,而是ServerObjFactory類對(duì)象。

客戶端:

ServerRemoteObject.IServerObjFactory serverFactory =    
 (ServerRemoteObject.IServerObjFactory) Activator.GetObject(
 typeof(ServerRemoteObject.IServerObjFactory),
 "tcp://localhost:8080/ServiceMessage");

ServerRemoteObject.IServerObject serverObj = serverFactory.CreateInstance();

  為什么說這是一種客戶端激活模式的模擬呢?從激活的方法來看,我們是使用了SingleCall模式來激活對(duì)象,但此時(shí)激活的并非我們要傳遞的遠(yuǎn)程對(duì)象,而是工廠對(duì)象。如果客戶端要?jiǎng)?chuàng)建遠(yuǎn)程對(duì)象,還應(yīng)該通過工廠對(duì)象的CreateInstance()方法來獲得。而這個(gè)方法正是在客戶端調(diào)用的。因此它的實(shí)現(xiàn)方式就等同于客戶端激活模式。

b、利用替代類來取代遠(yuǎn)程對(duì)象的元數(shù)據(jù)

  實(shí)際上,我們可以用一個(gè)trick,來欺騙Remoting。這里所說的替代類就是這個(gè)trick了。既然是提供服務(wù),Remoting傳遞的遠(yuǎn)程對(duì)象其實(shí)現(xiàn)的細(xì)節(jié)當(dāng)然是放在服務(wù)器端。而要在客戶端放對(duì)象的副本,不過是因?yàn)榭蛻舳吮仨氄{(diào)用構(gòu)造函數(shù),而采取的無奈之舉。既然具體的實(shí)現(xiàn)是在服務(wù)器端,又為了能在客戶端實(shí)例化,那么在客戶端就實(shí)現(xiàn)這些好了。至于實(shí)現(xiàn)的細(xì)節(jié),就不用管了。

  如果遠(yuǎn)程對(duì)象有方法,服務(wù)器端則提供方法實(shí)現(xiàn),而客戶端就提供這個(gè)方法就OK了,至于里面的實(shí)現(xiàn),你可以是拋出一個(gè)異常,或者return 一個(gè)null值;如果方法返回void,那么里面可以是空。關(guān)鍵是這個(gè)客戶端類對(duì)象要有這個(gè)方法。這個(gè)方法的實(shí)現(xiàn),其實(shí)和方法的聲明差不多,所以我說是一個(gè)trick。方法如是,構(gòu)造函數(shù)也如此。

還是用代碼來說明這種“陰謀”,更直觀:

服務(wù)器端:

public class ServerObject:MarshalByRefObject
{
 public ServerObject()
 {
  
 }

 public Person GetPersonInfo(string name,string sex,int age)
 {
  Person person = new Person();
  person.Name = name;
  person.Sex = sex;
  person.Age = age;
  return person;
 }  
}

客戶端:

public class ServerObject:MarshalByRefObject
{
 public ServerObj()
 {
  throw new System.NotImplementedException();
 }

 public Person GetPersonInfo(string name,string sex,int age)
 {
  throw new System.NotImplementedException();
 }  
}

  比較客戶端和服務(wù)器端,客戶端的方法GetPersonInfo(),沒有具體的實(shí)現(xiàn)細(xì)節(jié),只是拋出了一個(gè)異常。或者直接寫上語句return null,照樣OK。我們稱客戶端的這個(gè)類為遠(yuǎn)程對(duì)象的替代類。

3、利用配置文件實(shí)現(xiàn)

  前面所述的方法,于服務(wù)器uri、端口、以及激活模式的設(shè)置是用代碼來完成的。其實(shí)我們也可以用配置文件來設(shè)置。這樣做有個(gè)好處,因?yàn)檫@個(gè)配置文件是Xml文檔。如果需要改變端口或其他,我們就不需要修改程序,并重新編譯,而是只需要改變這個(gè)配置文件即可。

(1) 服務(wù)器端的配置文件:

configuration>
 system.runtime.remoting>
 application name="ServerRemoting">
  service>
  wellknown mode="Singleton" type="ServerRemoteObject.ServerObject" objectUri="ServiceMessage"/>
  /service>
  channels>
   channel ref="tcp" port="8080"/>
  /channels>
 /application>
 /system.runtime.remoting>
/configuration>

如果是客戶端激活模式,則把wellknown改為activated,同時(shí)刪除mode屬性。

把該配置文件放到服務(wù)器程序的應(yīng)用程序文件夾中,命名為ServerRemoting.config。那么前面的服務(wù)器端程序直接用這條語句即可:

RemotingConfiguration.Configure("ServerRemoting.config");

(2) 客戶端配置文件

如果是客戶端激活模式,修改和上面一樣。調(diào)用也是使用RemotingConfiguration.Configure()方法來調(diào)用存儲(chǔ)在客戶端的配置文件。

配置文件還可以放在machine.config中。如果客戶端程序是web應(yīng)用程序,則可以放在web.config中。

4、啟動(dòng)/關(guān)閉指定遠(yuǎn)程對(duì)象

  Remoting中沒有提供類似UnregisterWellKnownServiceType()的方法,也即是說,一旦通過注冊(cè)了遠(yuǎn)程對(duì)象,如果沒有關(guān)閉通道的話,該對(duì)象就一直存在于通道中。只要客戶端激活該對(duì)象,就會(huì)創(chuàng)建對(duì)象實(shí)例。如果Remoting傳送的只有一個(gè)遠(yuǎn)程對(duì)象,這不存在問題,關(guān)閉通道就可以了。如果傳送多個(gè)遠(yuǎn)程對(duì)象呢?要關(guān)閉指定的遠(yuǎn)程對(duì)象應(yīng)該怎么做?關(guān)閉之后又需要啟動(dòng)又該如何?

  我們注意到在Remoting中提供了Marshal()和Disconnect()方法,答案就在這里。Marshal()方法是將MarshalByRefObject類對(duì)象轉(zhuǎn)化為ObjRef類對(duì)象,這個(gè)對(duì)象是存儲(chǔ)生成代理以與遠(yuǎn)程對(duì)象通訊所需的所有相關(guān)信息。這樣就可以將該實(shí)例序列化以便在應(yīng)用程序域之間以及通過網(wǎng)絡(luò)進(jìn)行傳輸,客戶端就可以調(diào)用了。而Disconnect()方法則將具體的實(shí)例對(duì)象從通道中斷開。

方法如下:
首先注冊(cè)通道:

TcpChannel channel = new TcpChannel(8080);
ChannelServices.RegisterChannel(channel);

接著啟動(dòng)服務(wù):
先在服務(wù)器端實(shí)例化遠(yuǎn)程對(duì)象。

ServerObject obj = new ServerObject();

然后,注冊(cè)該對(duì)象。注意這里不用RemotingConfiguration.RegisterWellKnownServiceType(),而是使用RemotingServices.Marshal():

ObjRef objrefWellKnown = RemotingServices.Marshal(obj, "ServiceMessage");

如果要注銷對(duì)象,則:

RemotingServices.Disconnect(obj);

  要注意,這里Disconnect的類對(duì)象必須是前面實(shí)例化的對(duì)象。正因?yàn)榇耍覀兛梢愿鶕?jù)需要?jiǎng)?chuàng)建指定的遠(yuǎn)程對(duì)象,而關(guān)閉時(shí),則Disconnect之前實(shí)例化的對(duì)象。

  至于客戶端的調(diào)用,和前面WellKnown模式的方法相同,仍然是通過Activator.GetObject()來獲得。但從實(shí)現(xiàn)代碼來看,我們會(huì)注意到一個(gè)問題,由于服務(wù)器端是顯式的實(shí)例化了遠(yuǎn)程對(duì)象,因此不管客戶端有多少,是否相同,它們調(diào)用的都是同一個(gè)遠(yuǎn)程對(duì)象。因此我們將這個(gè)方法稱為模擬的SingleTon模式。

客戶端激活模式

  我們也可以通過Marshal()和Disconnect()來模擬客戶端激活模式。首先我們來回顧“遠(yuǎn)程對(duì)象元數(shù)據(jù)相關(guān)性”一節(jié),在這一節(jié)中,我說到采用設(shè)計(jì)模式的“抽象工廠”來創(chuàng)建對(duì)象實(shí)例,以此用SingleCall模式來模擬客戶端激活模式。在仔細(xì)想想前面的模擬的SingleTon模式。是不是答案就將呼之欲出呢?

  在“模擬的SingleTon”模式中,我們是將具體的遠(yuǎn)程對(duì)象實(shí)例進(jìn)行Marshal,以此讓客戶端獲得該對(duì)象的引用信息。那么我們換一種思路,當(dāng)我們用抽象工廠提供接口,工廠類實(shí)現(xiàn)創(chuàng)建遠(yuǎn)程對(duì)象的方法。然后我們?cè)诜?wù)器端創(chuàng)建工廠類實(shí)例。再將這個(gè)工廠類實(shí)例進(jìn)行Marshal。而客戶端獲取對(duì)象時(shí),不是獲取具體的遠(yuǎn)程對(duì)象,而是獲取具體的工廠類對(duì)象。然后再調(diào)用CreateInstance()方法來創(chuàng)建具體的遠(yuǎn)程對(duì)象實(shí)例。此時(shí),對(duì)于多個(gè)客戶端而言,調(diào)用的是同一個(gè)工廠類對(duì)象;然而遠(yuǎn)程對(duì)象是在各個(gè)客戶端自己創(chuàng)建的,因此對(duì)于遠(yuǎn)程對(duì)象而言,則是由客戶端激活,創(chuàng)建的是不同對(duì)象了。

當(dāng)我們要啟動(dòng)/關(guān)閉指定對(duì)象時(shí),只需要用Disconnet()方法來注銷工廠類對(duì)象就可以了。

六、小結(jié)

  Microsoft.Net Remoting真可以說是博大精深。整個(gè)Remoting的內(nèi)容不是我這一篇小文所能盡述的,更不是我這個(gè)Remoting的初學(xué)者所能掌握的。王國維在《人間詞話》一書中寫到:古今之成大事業(yè)大學(xué)問者,必經(jīng)過三種境界。“昨夜西風(fēng)凋碧樹,獨(dú)上高樓,望盡天涯路。”此第一境界也。“衣帶漸寬終不悔,為伊消得人憔悴。”此第二境界也。“眾里尋他千百度,驀然回首,那人卻在燈火闌珊處。”此第三境界也。如以此來形容我對(duì)Remoting的學(xué)習(xí),還處于“獨(dú)上高樓,望盡天涯路”的時(shí)候,真可以說還未曾登堂入室。

  或許需得“衣帶漸寬”,學(xué)得Remoting“終不悔”,方才可以“驀然回首”吧。

  以上就是.Net Remoting基礎(chǔ)的全部內(nèi)容,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • Microsoft .Net Remoting系列教程之三:Remoting事件處理全接觸
  • Microsoft .Net Remoting系列教程之二:Marshal、Disconnect與生命周期以及跟蹤服務(wù)
  • Flex 錯(cuò)誤(mx.messaging.messages::RemotingMessage)分析
  • ASP.NET通過Remoting service上傳文件
  • java webservice上傳下載文件代碼分享
  • java通過客戶端訪問服務(wù)器webservice的方法
  • ASP.NET使用WebService實(shí)現(xiàn)天氣預(yù)報(bào)功能
  • jQuery調(diào)用Webservice傳遞json數(shù)組的方法
  • C# WebService發(fā)布以及IIS發(fā)布
  • Remoting和Webservice的詳細(xì)介紹及區(qū)別

標(biāo)簽:海西 清遠(yuǎn) 甘肅 中衛(wèi) 臨夏 聊城 慶陽

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Microsoft .Net Remoting系列教程之一:.Net Remoting基礎(chǔ)篇》,本文關(guān)鍵詞  Microsoft,.Net,Remoting,系列,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Microsoft .Net Remoting系列教程之一:.Net Remoting基礎(chǔ)篇》相關(guān)的同類信息!
  • 本頁收集關(guān)于Microsoft .Net Remoting系列教程之一:.Net Remoting基礎(chǔ)篇的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 河钢钢铁贸易有限公司| 东莞市科机械有限公司| 中船重工环境工程有限公司怎么样 | 杭州 机械设备有限公司| 浙江蓝宝机械有限公司| 曲阜兴运输送机械设备有限公司| 诸城市安泰机械有限公司| 上海全众机械有限公司| 永 机械 有限公司| 江苏华粮机械有限公司| 温州正展机械有限公司| 重庆信鼎精密机械有限公司| 河北天冠环保机械有限公司| 湖北机械制造有限公司| 山西 重工有限公司| 天津天丰钢铁有限公司| 宁波翔博机械有限公司| 新金山钢铁有限公司| 温州包装机械有限公司| 郑州机械设备有限公司| 佛山市永盛达机械有限公司| 芜湖仅一机械有限公司| 普思信机械部件有限公司 | 青州市拓新机械设备有限公司| 深圳液压机械有限公司| 浙江富地机械有限公司| 常熟神马机械有限公司| 台州通宇变速机械有限公司| 无锡科创机械设计制造有限公司 | 常州市锦益机械有限公司| 镇江机械制造有限公司| 上海朗惠包装机械有限公司| 温州佳诚机械有限公司| 正扬电子机械有限公司| 江苏天泽精工机械有限公司| 重庆比德机械有限公司| 苏州科瑞机械有限公司| 章丘宇龙机械有限公司| 徐州川一工程机械有限公司| 南京阿特拉斯机械设备有限公司| 浙江名博机械有限公司| 广东明华机械有限公司| 河南真牛起重机有限公司| 深圳市力豪机械设备有限公司 | 山东联邦重工有限公司| 西安环宇机械制造有限公司| 扬州机械设备有限公司| 招远华丰机械设备有限公司| 河北安丰钢铁有限公司| 上海熊猫机械有限公司| 纺织机械制造有限公司| 赛柏精密机械有限公司| 江苏同正机械制造有限公司| 佛山市万为包装机械有限公司| 荃胜精密机械有限公司| 高邮和益机械有限公司| 青岛隆硕农牧机械制造有限公司 | 威塑料机械有限公司| 起帆电线电缆有限公司| 东莞发机械有限公司| 无锡 钢铁贸易有限公司| 沈阳机械设备有限公司| 菲美得机械有限公司| 上海起泽起重机械有限公司| 青岛谊金华塑料机械有限公司| 江苏天泽精工机械有限公司| 东莞市科环机械设备有限公司| 南京登峰起重设备制造有限公司| 安宁永昌钢铁有限公司| 金泰机械制造有限公司| 上海升立机械制造有限公司| 娄底 有限公司 机械| 无锡通用机械有限公司| 上海新麦机械设备制造有限公司| 上海光华印刷机械有限公司| 山东鲁新起重设备有限公司| 浙江塑机械有限公司| 常州市菲德机械部件有限公司| 鹤壁万丰矿山机械制造有限公司 | 浙江超力机械有限公司| 浩胜食品机械有限公司| 张家口煤矿机械有限公司| 东莞塑胶机械有限公司| 海门亿峰机械有限公司| 杭州海兴机械有限公司| 天津百利二通机械有限公司| 吉林鑫达钢铁有限公司地址| 山东华雄机械有限公司| 辛集市澳森钢铁有限公司| 山东鲁丽钢铁有限公司| 盐城市鑫益达精密机械有限公司 | 邢台德龙钢铁有限公司| 江苏联鑫钢铁有限公司| 工程机械有限公司经营范围| 宁波迪恩机械有限公司| 山西建龙钢铁有限公司| 江苏别具匠心机械设备有限公司| 珠海华亚机械有限公司| 永腾弹簧机械设备有限公司| 重型机械制造有限公司| 上海楚尚机械有限公司| 鞍山机械重工有限公司| 长沙宏银机械有限公司| 维特根机械有限公司| 上海泓阳机械有限公司| 江西 机械有限公司| 保定市恒瑞游乐机械有限公司| 唐山凯恒钢铁有限公司| 马钢合肥钢铁有限公司| 郑州 食品机械有限公司| 东莞市鼎祥通用机械设备有限公司 | 温州万润机械有限公司| 上海众冠食品机械有限公司| 浙江博创机械有限公司| 广西机械制造有限公司| 中核华兴机械化工程有限公司| 温州天富机械有限公司| 河南博众机械制造有限公司 | 烟台博迈机械有限公司| 苏州牧天动力机械有限公司| 营口隆仁重工有限公司| 小松山推工程机械有限公司| 苏州宇钻机械有限公司| 上海博储机械工业有限公司| 利星行机械昆山有限公司| 常州天山重工机械有限公司| 上海玉兆精密机械有限公司| 宁波震德机械制造有限公司| 洛阳重工机械有限公司| 扬州 机械设备 有限公司| 上海奉业包装机械有限公司| 扬州伏尔坎机械制造有限公司 | 衡水机械制造有限公司| 衡阳沃力机械有限公司| 广东中远海运重工有限公司| 泉州市闽达机械制造有限公司| 天津百利二通机械有限公司| 四川盛和机械设备有限公司| 浙江青山钢铁有限公司| 昆山鑫建诚机械设备有限公司| 浙江博创机械有限公司| 常州市雪龙机械制造有限公司| 天津德尚机械有限公司| 秦皇岛 机械设备有限公司| 安丰钢铁有限公司电话| 山东建筑机械有限公司| 常矿起重机械有限公司| 天津 机械制造有限公司| 福建海源机械有限公司| 派克包装机械有限公司| 无锡新麦机械有限公司| 云南旷迪机械有限公司| 温州市兴业机械设备有限公司| 无锡锡昌机械有限公司| 唐山宝泰钢铁有限公司| 潍坊机械制造有限公司| 上海环球机械有限公司| 宁波瑞基机械有限公司| 重庆泰诺机械有限公司| 山东宁联机械制造有限公司| 东莞机械制造有限公司| 江苏食品机械有限公司| 博山华翔机械制造有限公司| 宁波伟隆传动机械有限公司| 如东宏信机械制造有限公司| 江苏莱宝机械制造有限公司| 广州海缔机械有限公司| 苏州擎邦机械有限公司| 上海红重机械装备有限公司| 青岛一津机械有限公司| 佛山市科鹰机械有限公司| 上海诚达机械有限公司| 山推楚天工程机械有限公司| 天津起重机械有限公司| 东莞恒力机械有限公司| 广州田田机械设备有限公司| 山东重型机械有限公司| 浙江威泰机械有限公司| 山东岳峰起重机械有限公司| 山西 机械设备有限公司| 永腾弹簧机械设备有限公司| 鑫泰数控机械有限公司| 青岛诺恩包装机械有限公司| 上海沛愉机械制造有限公司| 湖南汇杰机械设备有限公司| 山东塑机械有限公司| 上海捷舟工程机械有限公司| 大连胜龙包装机械有限公司| 苏州凯尔博精密机械有限公司 | 山本机械苏州有限公司| 佛山市机械制造有限公司| 包装机械设备有限公司| 常州超通机械有限公司| 郑州龙阳重型机械设备有限公司| 萍乡萍钢安源钢铁有限公司| 湛江恒润机械有限公司| 上海翔展机械有限公司| 天津石油机械有限公司| 温岭宏业机械有限公司| 无锡锡科机械制造有限公司| 威海石岛重工有限公司| 浙江美格机械有限公司| 南阳鼎鑫钢铁有限公司| 昆山施耐特机械有限公司| 上海沃勒起重设备有限公司| 重庆辉昌机械设备有限公司| 天津市钢铁贸易有限公司| 沧州昌鸿磨浆机械有限公司| 昆山海进机械有限公司| 鲁山万通通机械制造有限公司| 辽宁中冶石化机械有限公司| 珠海市中鑫隆机械化建设工程有限公司 | 昆山联德精密机械有限公司| 重庆恒科机械制造有限公司| 宁波科鼎钢铁有限公司| 青岛迪恩机械制造有限公司| 汕头 机械有限公司招聘| 扬州沃尔特机械有限公司| 扬州金威机械有限公司| 青岛山森机械有限公司| 江苏海豚船舶机械有限公司| 洛阳友建工程机械有限公司 | 台州精密机械有限公司| 合肥春华起重机械有限公司| 东莞市茂丰机械有限公司| 芜湖良仕机械有限公司| 江阴江顺精密机械零部件有限公司| 深圳优捷机械有限公司| 恩格尔机械上海有限公司| 阜新恒泰机械有限公司| 珠海飞马传动机械有限公司| 广州起重机械有限公司招聘| 济宁机械设备有限公司| 服装有限公司起名大全| 招商局重工深圳有限公司| 东莞市雅康精密机械有限公司 | 亚德林机械有限公司| 天门仙粮机械有限公司| 山东华伟重工机械有限公司| 上海德耐尔压缩机械有限公司| 沈阳奎鑫钢铁有限公司| 河南机械设备制造有限公司列表| 上海杰姆博机械设备有限公司| 河北永洋钢铁有限公司| 芜湖富鑫钢铁有限公司| 浙江包装机械有限公司| 温州联腾包装机械有限公司| 重庆自动化机械有限公司| 青岛新东机械有限公司| 合肥华运机械制造有限公司 | 浙江大宇轻工机械有限公司| 河南飞龙工程机械制造有限公司| 天烨机械工程有限公司| 山东恒升机械有限公司| 无锡伊诺特石化机械设备有限公司| 山东闽源钢铁有限公司| 绵阳机械制造有限公司| 苏州明基自动化机械设备有限公司| 青岛沃隆花生机械有限公司 | 山东泰安机械有限公司| 厦门市机械有限公司| 江阴市永昌药化机械有限公司| 浙江全兴机械制造有限公司| 荏原机械烟台有限公司| 广西五丰机械有限公司| 辽宁富一机械有限公司| 无锡金比机械有限公司| 威海隆发机械有限公司| 哈尔滨恒力达机械有限公司| 常州市豪乐机械有限公司| 河北联港废钢铁回收有限公司| 陕西恒德精密机械有限公司| 青州泰达机械有限公司| 利星行机械有限公司| 德州液压机械有限公司| 伟业机械制造有限公司| 南通苏诺特包装机械有限公司| 东莞兆泰机械设备有限公司 | 石家庄聚力特机械有限公司| 深圳创世纪机械有限公司| 深圳塑胶机械有限公司| 佛山市鹏轩机械制造有限公司 | 合肥康恒机械有限公司| 杭州誉球机械有限公司| 重庆机械制造有限公司| 重庆远博机械有限公司| 三门峡机械有限公司| 辽阳腾龙钢铁有限公司| 江苏中热机械设备有限公司 | 淄博宏达钢铁有限公司| 山东泰力起重设备有限公司| 河南大方起重机有限公司| 河南耿力支护机械设备有限公司| 徐州起重机械有限公司| 烟台瑞进精密机械有限公司| 天津的机械设备有限公司| 南京贝隆齐机械有限公司| 江苏仁达机械有限公司怎么样| 北京富佳伟业机械制造有限公司| 浙江达青机械有限公司| 海沃机械扬州有限公司| 扬州 机械 有限公司| 长沙宏银机械有限公司| 台州工交机械有限公司| 大连世达重工有限公司| 哈尔滨 机械 有限公司| 无锡六叶机械有限公司| 江苏新技机械有限公司| 珠海粤裕丰钢铁有限公司| 纸箱机械设备有限公司| 武安裕华钢铁有限公司| 河北机械进出口有限公司| 宁波天竺工程机械有限公司| 聊城日发纺织机械有限公司| 深圳市钢铁有限公司| 郑州市鑫宇机械制造有限公司| 合肥海源机械有限公司| 深圳市合发齿轮机械有限公司| 鹤壁市豫星机械制造有限公司| 科倍隆南京机械有限公司| 青岛欣鑫数控精密机械有限公司| 上海瑞阳机械有限公司| 浙江中益机械有限公司| 广州德晟机械有限公司| 江苏凯凯机械有限公司| 宣化华泰矿冶机械有限公司| 贵阳长乐钢铁有限公司| 秦皇岛机械有限公司| 河北展利机械有限公司| 山东米科思机械设备有限公司 | 海瑞克隧道机械有限公司| 江苏科力机械有限公司| 南京 机械有限公司| 江苏泰美环保机械有限公司| 德瑞机械设备有限公司| 武汉中轻机械有限公司| 济南 机械设备有限公司| 佛山市宝陶机械设备有限公司| 江西台鑫钢铁有限公司| 华新机械有限公司官网| 郑州中意矿山机械有限公司| 天津富启机械有限公司| 登福机械(上海)有限公司| 南京儒一航空机械装备有限公司| 江苏科威机械有限公司| 肥城云宇机械有限公司| 泰富重工制造有限公司| 深圳市稻田包装机械有限公司 | 山东建凌机械有限公司| 上海敏杰机械有限公司| 苏州开隆机械有限公司| 大连 机械制造 有限公司| 苏州敏喆机械有限公司| 格润德机械制造有限公司| 湖南华菱钢铁有限公司| 上海奉业包装机械有限公司| 秦皇岛 机械设备有限公司| 华东机械制造有限公司| 上海新麦机械设备制造有限公司| 广州旭众食品机械有限公司| 深圳海邻机械设备有限公司| 青岛欧普机械有限公司| 芜湖富鑫钢铁有限公司| 江苏仁达机械有限公司| 上海起帆电线电缆有限公司| 洛阳卓格哈斯机械有限公司| 河南胜飞石油机械有限公司| 中航国际钢铁贸易有限公司| 济南岳峰机械有限公司| 上海杰姆博机械设备有限公司 | 机械加工 有限公司| 四川高龙机械有限公司| 河北农哈哈机械有限公司| 太仓精密机械有限公司| 河南矿山重型起重机械有限公司| 山东明美数控机械有限公司| 青岛悦工机械有限公司| 青岛非凡包装机械有限公司 | 北京晨光兴业机械有限公司| 张家港重工有限公司| 德龙钢铁有限公司地址| 南通庞源机械工程有限公司| 昆山胜代机械有限公司招聘| 重庆比德机械有限公司| 莱州三和机械有限公司| 常州倍安特动力机械有限公司| 英国敬业钢铁有限公司| 恒瑞机械制造有限公司| 潍坊广德机械有限公司| 青州汇众机械有限公司| 浙江机械制造有限公司| 江苏梅花机械有限公司| 雷肯农业机械有限公司| 济南业兴通工程机械有限公司| 江门携成机械有限公司怎样| 山东明宇重工机械有限公司| 卓郎智能机械有限公司| 广州市德晟机械有限公司| 南京贝隆齐机械有限公司| 河南力博矿山机械有限公司| 苏州同大机械有限公司| 东莞精密机械有限公司| 河北神耕机械有限公司| 宁波金记机械有限公司| 广东粤东机械实业有限公司| 湖南中旺工程机械设备有限公司| 机械有限公司 招聘| 山东博远重工有限公司| 杭州千和精密机械有限公司| 江苏飞耀机械制造有限公司| 苏州仁成包装机械有限公司| 宜春江特机械传动有限公司| 北京京民兴机械设备有限公司| 东莞市天周机械有限公司| 昆山昆成机械有限公司| 徐州恒辉编织机械有限公司| 浙江高达机械有限公司| 星光传动机械有限公司| 邯郸纺织机械有限公司| 高密高锻机械有限公司| 山东正阳机械有限公司| 芜湖灵芝机械有限公司| 杭州驰丰机械有限公司| 上海光华印刷机械有限公司| 涞源奥宇钢铁有限公司| 江苏华雕机械有限公司| 德丰机械制造有限公司| 潍坊钰兴机械有限公司| 海盐鼎盛机械有限公司| 杭州起重吊装有限公司| 恒兴机械设备有限公司| 江西协旭机械有限公司| 浙江仁工机械有限公司| 广意永雄机械有限公司| 大连仁海重工有限公司| 聊城日发纺织机械有限公司| 常州恒力机械有限公司| 昆山崇粲机械有限公司| 武汉瑞威特机械有限公司| 扬州扬宝机械有限公司| 山东 工程机械有限公司| 河北冀工机械制造有限公司| 常州天山重工机械有限公司| 安宁市永昌钢铁有限公司| 福建亿鑫钢铁有限公司| 河南万合机械有限公司| 浙江山海机械有限公司| 上海敏杰机械有限公司| 台州市双辉机械设备有限公司| 大连地拓重工有限公司| 潍坊宇航机械有限公司| 唐山榕丰钢铁有限公司| 潍坊永成机械有限公司| 鼎业机械设备有限公司| 江苏巨风机械制造有限公司| 上海松川远亿机械设备有限公司 | 山东旭升机械有限公司| 广州美特机械有限公司| 诸城市盛和机械有限公司| 江苏爱斯特机械有限公司怎么样| 上海众德机械有限公司| 哈尔滨机械有限公司| 浙江飞挺机械有限公司| 北京市政中燕工程机械制造有限公司 | 济南锐捷机械设备有限公司| 山东造纸机械厂有限公司| 丰诺植保机械制造有限公司| 泰安古河机械有限公司| 重庆嘉木机械有限公司| 大连铸鸿机械有限公司| 招远市矿山机械有限公司| 江苏巨风机械制造有限公司| 无锡力马化工机械有限公司| 天津国际机械阀门有限公司| 常州市 机械设备有限公司| 上海卓汇机械有限公司| 河北新钢钢铁有限公司| 济南金胜星机械设备有限公司| 星光传动机械有限公司| 金瑞机械制造有限公司| 大丰 机械有限公司| 南京一嘉起重机械制造有限公司| 德马科起重机械有限公司| 东莞市得士威机械工业有限公司 | 岳阳神冈起重电磁铁有限公司| 江阴机械制造有限公司| 大连精密机械有限公司| 南京苏荣机械有限公司| 山东嘉意机械有限公司| 沃德精密机械有限公司| 无锡锡南铸造机械有限公司| 苏州辽鞍机械有限公司| 南京创力传动机械有限公司| 苏州晋日五金机械有限公司 | 杭州一鼎传动机械有限公司| 成都鑫泽机械有限公司| 昆山锦沪机械有限公司| 深圳市海德精密机械有限公司| 唐山国丰钢铁有限公司| 南京宏伟屠宰机械制造有限公司| 东莞发机械有限公司| 山东巨力机械有限公司| 鹰起重机械有限公司| 江苏钢锐精密机械有限公司| 成都机械制造有限公司| 上海科劳机械设备有限公司| 昆山联德精密机械有限公司 | 佛山钢铁贸易有限公司| 无锡裕达机械有限公司| 路通重工机械有限公司| 诸城市安泰机械有限公司| 山东鲁成起重机械有限公司| 定州市机械有限公司| 杭州德智机械有限公司| 浙江宇捷机械有限公司| 山东正丰钢铁有限公司| 广东三浦重工有限公司| 江西蓝翔重工有限公司| 南京泽创机械有限公司| 黄山三佳谊华精密机械有限公司| 食品机械设备有限公司| 杭重工程机械有限公司| 上海洗涤机械有限公司| 威海欧东机械有限公司| 苏州全彩机械设备有限公司 | 温州印刷机械有限公司| 东莞液压机械有限公司| 重庆川口机械有限公司| 辽宁机械制造有限公司| 宁波恒阳机械有限公司| 浙江歌德起重机有限公司| 青岛云龙纺织机械有限公司| 山鑫机械制造有限公司| 衢州巨鑫机械有限公司| 新乐华宝塑料机械有限公司| 上海金恒机械制造有限公司| 广州市佳速精密机械有限公司| 佛山市顺德区金工铝门窗机械实业有限公司| 和本精密机械有限公司| 上海乔麦包装机械有限公司| 新乡市振英机械设备有限公司 | 永川海通机械有限公司| 阜阳 机械 有限公司| 温州市春来包装机械有限公司| 上海昌强重工机械有限公司| 邢台远大机械制造有限公司| 江苏永康机械有限公司| 珠海华亚机械有限公司| 建湖县液压机械有限公司| 上海辰品食品机械有限公司| 苏州原禄机械有限公司| 曲阜圣达机械有限公司| 青岛唐宇机械制造有限公司 | 恒源机械制造有限公司| 漳州市机械有限公司| 江苏力源液压机械有限公司| 华宝机械制造有限公司| 常州包装机械有限公司| 广州新成机械技术有限公司| 江苏大圣机械制造有限公司| 咸阳 机械制造有限公司| 成都中挖机械有限公司| 南通苏诺特包装机械有限公司| 青岛宏达锻压机械有限公司| 佛山玻璃机械有限公司| 诺曼艾索机械技术(北京)有限公司 | 张家港市贝尔机械有限公司| 东营市机械有限公司| 杭州铁牛机械有限公司| 成都蓉诚机械设备有限公司| 河南矿山起重有限公司| 洛阳大华重型机械有限公司 | 江苏佳粮机械有限公司| 山东瑞泽重工有限公司| 泉州佳升机械有限公司| 攀枝花钢铁有限公司| 力华机械设备有限公司| 安徽机械设备有限公司| 上海诚淘机械有限公司| 龙川航辉钢铁有限公司| 福建敏捷机械有限公司| 河北德欧机械有限公司| 烟台飞达机械设备有限公司| 广东思沃精密机械有限公司| 苏州博机械有限公司| 保定东利机械制造有限公司| 青岛隆硕农牧机械制造有限公司| 廊坊德基机械有限公司| 山东起重机械有限公司| 浙江康思特动力机械有限公司| 烟台工程机械有限公司| 中山机械制造有限公司| 华西钢铁有限公司电话| 旭恒精工机械制造有限公司| 河南长城机械有限公司| 常州市禾昌机械有限公司| 华新机械有限公司官网| 东莞宏品智能机械有限公司| 斗山工程机械有限公司| 三友重工机械有限公司| 河南省中原起重机械有限公司 | 山东欧劲工程机械有限公司| 徐州智茸工程机械有限公司| 台州 精密机械有限公司| 常州天山重工机械有限公司 | 大连工进机械制造有限公司| 江阴市礼联机械有限公司| 广州东升机械有限公司| 徐州七星机械有限公司| 均强机械苏州有限公司| 西安帕吉特精密机械有限公司| 温州奋起皮业有限公司| 苏州雁达机械有限公司| 石家庄机械制造有限公司| 恒丰机械配件有限公司| 上海纳丰机械设备有限公司| 宁波佳诚机械有限公司| 沈阳工程机械有限公司| 同向精密机械有限公司| 深圳电子机械有限公司| 贝力特机械有限公司| 东莞市岛精机械有限公司| 郑州包装机械有限公司| 南京寿旺机械设备有限公司| 南通江华机械有限公司| 上海金恒机械制造有限公司 | 厦门众达钢铁有限公司| 深圳市创能机械有限公司| 昆成机械制造有限公司| 山东隆盛钢铁有限公司| 莱州行星机械有限公司| 瑞鼎精密机械有限公司| 江阴韩一钢铁有限公司| 上海路桥机械有限公司| 广东荣钢钢铁有限公司| 威海欧东机械有限公司骗局| 东莞市鼎祥通用机械设备有限公司| 群鑫机械有限公司电话| 青岛科泰重工机械有限公司| 东莞智荣机械有限公司| 上海好机械有限公司| 长沙中京机械有限公司| 日照港达船舶重工有限公司| 无锡森本精密机械有限公司| 临沂机械制造有限公司| 石家庄嘉祥精密机械有限公司| 上海荣沃机械有限公司| 宁波伟隆传动机械有限公司| 扬州冶金机械有限公司| 河南省新乡市矿山起重机有限公司 | 江苏大津重工有限公司| 重庆足航钢铁有限公司| 上海起重设备有限公司| 安阳永兴钢铁有限公司| 桂林平钢钢铁有限公司| 山东起重机厂有限公司| 厦门大金机械有限公司| 四川建筑机械有限公司| 杭州方圆塑料机械有限公司 | 广东包装机械有限公司| 无锡锡州机械有限公司| 新乡正兴机械有限公司| 安徽精密机械有限公司| 鸿源机械制造有限公司| 青岛奥硕数控机械有限公司| 大连科信机械有限公司| 物理农林机械有限公司| 匹思通机械有限公司| 中马园林机械有限公司| 江苏科圣化工机械有限公司| 洛阳卓格哈斯机械有限公司| 宁波凯特机械有限公司| 江苏三麦食品机械有限公司| 厦门天一精密机械有限公司| 河南奥创机械设备有限公司| 常州安捷起重吊装有限公司| 厦门银华机械有限公司| 诚辉机械制造有限公司| 宁波延晟机械有限公司| 浙江威泰机械有限公司| 郑州维科重工机械有限公司| 青岛皓腾机械制造有限公司| 长沙威沃机械制造有限公司| 东莞精密机械有限公司| 常州工程机械有限公司| 辽宁天一重工有限公司| 深圳巨涛机械设备有限公司| 唐山燕钢钢铁有限公司| 苏州精雕精密机械工程有限公司 | 上海百劲机械有限公司| 威海欧东机械有限公司| 新乡市大汉振动机械有限公司| 沧州恒宇机械有限公司| 安阳锻压机械有限公司| 南通佳宝机械有限公司| 成都欧曼机械有限公司| 保定市恒瑞游乐机械有限公司| 武汉臻尚机械设备有限公司| 河北政博机械制造有限公司| 天津的机械设备有限公司| 运输有限公司起名大全| 泰州机械 有限公司| 常州双鸟起重机械有限公司| 山东通佳机械有限公司| 桂林中天机械有限公司| 广东锐亚机械有限公司| 厦门大金机械有限公司| 起重机制造有限公司| 无锡锡洲机械有限公司| 常州光明包装机械有限公司| 曲阜市机械有限公司| 重庆德运机械制造有限公司| 芜湖中安重工自动化装备有限公司 | 起帆电线电缆有限公司| 天津蓝科机械有限公司| 保定金地机械有限公司| 佛山市晶菱玻璃机械有限公司| 大连吉利机械配件有限公司| 洛阳友建工程机械有限公司| 河北坤达起重设备有限公司| 青岛中华宇塑料机械有限公司 | 富伟精密机械有限公司| 上海百勤机械有限公司| 山东长江机械有限公司| 温州润新机械制造有限公司| 旭海机械设备有限公司| 上海腾迈机械有限公司| 单县江华机械有限公司| 青岛纺织机械有限公司| 河南小松工程机械有限公司| 江西龙工机械有限公司| 郑州重工机械有限公司| 常州汤姆包装机械有限公司| 山东机械设备有限公司| 湖北鄂钢扬子重型机械制造有限公司| 招商局重工(江苏)有限公司 | 山东金大丰机械有限公司| 玉环 机械有限公司| 广州磊蒙机械设备有限公司| 济南赛信机械有限公司| 上海行雄机械有限公司| 佛山市钲昌机械设备有限公司 | 山东兴田机械有限公司| 陕西 工程机械有限公司| 日照立盈机械有限公司| 金韦尔机械有限公司| 肥城金塔机械有限公司| 无锡裕达机械有限公司| 成都鑫泽机械有限公司| 陕西 机械设备有限公司| 江苏贸隆机械制造有限公司| 湖南卓迪机械有限公司| 柳州恒瑞机械有限公司| 青岛南牧机械设备有限公司| 合肥明泰机械施工有限公司| 山西天祥机械有限公司| 四川建筑机械有限公司| 上海翊特机械有限公司| 山东平安工程机械有限公司| 油机机械工业有限公司| 厦门大金机械有限公司| 杭州容瑞机械技术有限公司| 杭州三普机械有限公司| 大连华威机械有限公司| 山东闽源钢铁有限公司| 焦作市虹起制动器有限公司| 淮南凯盛重工有限公司| 物资有限公司起名大全| 南通佳宝机械有限公司| 上海宝锻机械制造有限公司| 重庆机械租赁有限公司| 东莞市兆恒机械有限公司| 上海中机械有限公司| 河北德龙钢铁有限公司| 苏州晋日五金机械有限公司| 杭州同创顶立机械有限公司| 东莞市柯达机械有限公司| 佳友精密机械有限公司| 广州铸星机械有限公司| 青岛谊金华塑料机械有限公司| 江苏普格机械有限公司| 河南正工机械制造有限公司| 长春协展机械工业有限公司| 永盛达机械有限公司| 襄阳博亚机械有限公司| 济南腾越机械制造有限公司| 科华机械制造有限公司| 菲特压片机械有限公司| 长沙晶锐机械有限公司| 山东龙腾机械有限公司| 宁波雄腾机械有限公司| 河北犀牛民用机械有限公司| 鑫港机械制造有限公司| 广东新船重工有限公司| 广州泓锋食品机械有限公司| 唐山 机械设备有限公司| 洛阳博马农业工程机械有限公司| 山东龙起重工有限公司| 苏州 机械 有限公司| 潍坊裕川机械有限公司| 海华机械制造有限公司| 辽宁亿丰钢铁有限公司| 龙岩市机械有限公司| 大连升隆机械有限公司| 铜陵富鑫钢铁有限公司| 济南弘川包装机械有限公司 | 天津京龙工程机械有限公司| 佛山市顺德区金工铝门窗机械实业有限公司 | 衡阳沃力机械有限公司| 装饰工程有限公司起名| 杭州贝克机械有限公司| 无锡全盛安仁机械有限公司| 天津蓝科机械有限公司| 泉州力泉机械有限公司| 河南省起重机械有限公司| 杭州联德机械有限公司| 东莞明玮机械有限公司| 三门峡宏基机械有限公司| 农业机械有限公司招聘| 沈阳矿山机械有限公司| 苏州松发机械有限公司| 扬州伏尔坎机械制造有限公司| 邯郸海拓机械有限公司| 邯郸包装机械有限公司| 台州博州机械有限公司| 江苏江佳机械有限公司| 湖南中一惠龙机械设备有限公司 | 服装有限公司起名大全| 青岛谊金华塑料机械有限公司 | 重庆金丰机械有限公司| 河南豫工机械有限公司| 上海三景机械有限公司| 招商局重工深圳有限公司| 浙江嘉元机械制造有限公司| 常州铭盈包装机械有限公司| 伊之密机械有限公司| 宁波裕民机械工业有限公司| 沈阳盈好机械有限公司| 沈阳高新机械有限公司| 邯郸新兴重型机械有限公司| 苏州捷合机械有限公司| 东莞科雄机械有限公司| 重庆机械设备有限公司| 江苏宏博机械制造有限公司| 马钢合肥钢铁有限公司| 河南黎明路桥重工有限公司| 上海科纳机械有限公司| 曲阜兴运输送机械设备有限公司 | 郑州 食品机械有限公司| 荆州石油机械有限公司| 山东闽源钢铁有限公司| 百超玻璃机械有限公司| 成机械设备有限公司| 张家港海狮洗涤机械有限公司 | 福建盛达机械有限公司| 德枫丹青岛机械有限公司招聘| 泰兴市立君机械设备有限公司 | 深圳塑胶机械有限公司| 金韦尔机械有限公司| 盛达机械设备有限公司| 无锡橡塑机械有限公司| 华电重工机械有限公司| 江苏永康机械有限公司| 青岛华牧机械有限公司| 南通龙威机械有限公司| 江苏鑫林钢铁有限公司| 浙江矿山机械有限公司| 江苏青山机械有限公司| 台正精密机械有限公司| 台湾鸿昌机械有限公司| 东方液压机械有限公司| 天门仙粮机械有限公司| 广东先达数控机械有限公司| 湖南湘船重工有限公司| 福建群峰机械有限公司| 如皋市通达机械制造有限公司| 金属制品有限公司起名| 常州市日中精密机械有限公司 | 东莞市瑞沧机械设备有限公司| 上海创灵包装机械制造有限公司| 博山华翔机械制造有限公司| 邯郸海拓机械有限公司| 巩义市瑞赛克机械设备有限公司| 佛山海之力机械有限公司| 湘东化工机械有限公司| 德阳川广机械有限公司| 东莞巨冈机械有限公司| 湖北鄂钢扬子重型机械制造有限公司 | 芜湖机械制造有限公司| 金坛包装机械有限公司| 景德镇 机械有限公司| 三星机械制造有限公司| 洛阳工程机械有限公司| 温州迈高机械有限公司| 江苏谷登工程机械装备有限公司| 天津市仁翼钢铁有限公司| 山东川普机械有限公司| 东莞市岛精机械有限公司| 兰州炊事机械有限公司| 湖南金牛重工机械有限公司| 邯郸市复液液压机械有限公司| 上海腾迈机械有限公司| 诸城市恒顺机械有限公司| 长沙起重机厂有限公司| 扬州扬工机械有限公司| 河北东方富达机械有限公司 | 章丘市机械有限公司| 临沂大阳通用机械有限公司| 东莞市鑫焘机械有限公司| 重庆江峰机械有限公司| 芜湖汇丰机械工业有限公司 | 上海光华印刷机械有限公司| 铜陵群力机械有限公司| 石家庄瑞辉机械设备有限公司 | 郑州机械设备有限公司| 天津千百顺钢铁贸易有限公司| 铜梁君卓机械有限公司| 淄博宏达钢铁有限公司| 苏州荣业机械有限公司| 日发纺织机械有限公司| 山东 钢铁有限公司| 武汉环卫机械有限公司| 南京寿旺机械设备有限公司| 上海欧特莱阀门机械有限公司| 济南钢铁 有限公司| 东莞市高臻机械设备有限公司| 浙江精劲机械有限公司| 上海众和包装机械有限公司| 燕拓航(北京)真空机械有限公司| 新乡市威远机械有限公司| 武汉联明机械有限公司| 江苏盐城机械有限公司| 河北春耕机械制造有限公司| 冈热机械常州有限公司| 日发纺织机械有限公司| 湖南金峰机械有限公司| 台州精密机械有限公司| 杭州冠浩机械设备有限公司| 信息工程有限公司起名| 铜陵富鑫钢铁有限公司| 湖北粮食机械有限公司| 东莞市亚龙玻璃机械有限公司| 潍坊大众机械有限公司| 重庆动力机械有限公司| 金格瑞机械有限公司| 青岛武船重工有限公司| 禹城市华普机械设备有限公司| 常州创领机械有限公司| 南京创力传动机械有限公司| 诸城市富瑞德机械有限公司| 广东巨风机械制造有限公司| 东莞市力华机械设备有限公司| 东莞市巨冈机械工业有限公司| 中核机械工程有限公司| 青州市拓新机械设备有限公司| 劲源机械设备有限公司| 浙江万能弹簧机械有限公司 | 太原 机械 有限公司| 昆山施耐特机械有限公司| 山东巨力机械有限公司| 北京余特包装机械有限公司| 山东良鑫机械有限公司| 苏州金纬机械制造有限公司| 佛山市奥索包装机械有限公司 | 景隆重工机械有限公司| 河北天冠环保机械有限公司| 上海鑫越包装机械有限公司| 广州卓远机械有限公司| 无锡旭辉机械有限公司| 龙口中宇机械有限公司| 唐山经安钢铁有限公司| 唐山 机械设备有限公司| 芜湖汇丰机械工业有限公司| 广州包装机械有限公司| 武义海拓机械有限公司| 上海凌鹰机械有限公司| 成都包装机械有限公司| 苏州立注机械有限公司| 北京余特包装机械有限公司| 汉中群峰机械制造有限公司| 平煤机械设备有限公司| 佛山市海裕机械有限公司| 辽宁天亿机械有限公司| 潍坊爱地植保机械有限公司| 克朗斯机械有限公司| 大连机械制造有限公司| 上海相宜机械有限公司| 坎山机械有限公司招聘| 浙江双畅起重机械有限公司| 常州宏机械有限公司| 郑州永联机械有限公司| 德州佳永机械制造有限公司| 九江益鑫机械有限公司| 烟台金土源机械化工程有限公司| 卓郎新疆智能机械有限公司| 青州市拓新机械设备有限公司| 上海 包装机械 有限公司| 苏州昌瑞机械有限公司| 青岛同三塑料机械有限公司|