Wcf 可配置的服務呼叫方式

2022-01-31 12:17:03 字數 2392 閱讀 1827

通常,如果採用.net的wcf技術來架構soa風格的應用,我們會把專案做一些基本的分層,如上圖:

01. contract層:通常定義服務的介面(即服務契約servicecontract,指明該服務提供了哪些方法可供外部呼叫)、以及介面方法中傳輸的model定義(即:資料契約datacontract,指明方法中的物件引數的class定義)

02. implementation層:即服務介面的實現

03. host層:wcf最終需要乙個宿主環境,如果是web應用,最簡單的辦法莫過於直接寄宿在iis上

實際部署時,一般將wcf服務層和client層分開部署,如下圖:

如果併發數隨著業務的增長而增長,不管是client層的website,還是服務層的service,加上其它技術,比如集群或負載均衡之類,可以很方便進行擴充。服務的實現邏輯也可以方便的單獨的修改替換(前提是服務契約相對穩定)

但如果應用的規模較小,出於成本考慮,完全有可能service層和website client部署在一台機器上,雖然1個iis上架2個站點完全沒有問題,但是總歸有點不爽,既然都在一台機器上了,為啥還要自己呼叫自己,增加無謂的開銷呢?

最好是在不修改原來**的前提下,通過簡單的配置檔案修改,就能讓原來遠端呼叫wcf的方式,改成直接呼叫本地dll程式集,反過來也一樣,這樣就比較靈活了。事實上,我們公司很多專案就是這樣處理的,規模小的應用,直接全都部署在一台機器上,等應用規模上去了,再分開部署,**完全不用動,只要修改相關配置即可。

1

<

>23

<

add

key="calltype"

value

="remote"

/>45

<

add

key="assemblyname"

value

="sjtu.wcf.demo.implementation"

/>67

<

add

key="servicetypename"

value

="sjtu.wcf.demo.implementation.demoservice"

/>

8>

calltype就決定了呼叫方式:「遠端呼叫」或「本地dll呼叫」。然後在本地寫乙個呼叫的client類:(注:wcf的呼叫方式,參考了dudu的文章「享受無止境 - 改進版wcf client」)

1

using

system;

2using

system.linq.expressions;

3using

system.reflection;

4using

system.servicemodel;

5using

sjtu.wcf.demo.client.configs;67

namespace

sjtu.wcf.demo.client828

}2930///

31///

對外提供的call方法

32///

33///

34///

35///

36public r call(expression>expression)

3742

return invokeremotemethod(expression);43}

4445

///46

///呼叫本地程式集方法

47///

48///

49///

50///

51private r invokelocalmethod(expression>operation)

5258

59///

60///

呼叫遠端wcf方法

61///

62///

63///

64///

65private r invokeremotemethod(expression>operation)

6679}80

catch

8184

return

result;85}

86}87 }

view code

這樣呼叫時,只需要一行**即可:

1

var students = new wcfclient().call(c => c.getstudents("

jerry

"));

WCF系列之WCF服務呼叫方式

wcf服務呼叫通過兩種常用的方式 一種是借助 生成工具svcutil.exe或者新增服務引用的方式,一種是通過channelfactory直接建立服務 物件進行服務呼叫。svcutil.exe是乙個命令列工具,位於 c program files microsoft sdks windows v7....

quartz 可配置的定時服務

一 可配置的定時服務先設計資料庫表結構 create table job id char 36 not null,name varchar 36 not null comment 任務名 bean name varchar 100 not null comment spring bean name ...

ajax呼叫WCF服務

關於ajax呼叫wcf服務分為跨域和不跨域兩種方式,今天咱們先介紹下不跨域下的呼叫方法。demo是在vs2008寫的.經過測試與研究,發現ajax呼叫wcf服務必須滿足以下條件 1.wcf的通訊方式必須使用webhttpbinding 2.必須設定節點的值 3.服務的實現必須新增 aspnetcom...