Wcf通訊基礎框架方案(三) 客戶端

2021-09-08 15:35:02 字數 2037 閱讀 2456

假設定義了乙個服務契約:

[servicecontract(namespace = "wcfextension.services.inte***ce")]

public

inte***ce itestservice

首先看一下,客戶端是怎麼使用的:

console.writeline(wcfservicelocator.create().add(1, 3));
wcfservicelocator.create()出來的就是乙個介面,可以保持這個引用以後呼叫,也可以每次直接這麼寫,那麼來看看wcfservicelocator:

public

static t create() where t : class

public

static iwcflogservice getlogservice()

create方法很簡單,只是返回乙個servicerealproxy的透明**。這個之後會詳細說,下面單獨有乙個getlogservice專門用於獲取日誌服務。這裡通過心跳來判斷遠端的日誌服務是否可用,如果不可用直接返回本地的日誌服務。之所以日誌服務的真實**和其它業務服務的真實**不同是因為,在業務服務中我們需要加入很多橫切日誌,在日誌服務中不需要:

public

override imessage invoke(imessage msg)

catch (exception ex)

if (wcflogmanager.current().exceptioninfo.client.enabled)

methodreturn = new returnmessage(exception, methodcall);

}else}}

finally

}return methodreturn;

}}

這就是servicerealproxy的invoke方法實現了,可以看到:

1) 在這裡我們using了wcfserviceclientfactory.createserviceclient返回的包裝後的channel,讓每一次呼叫都可以正常關閉通道。

2) 在這裡我們加入了呼叫方法成功後的日誌,以及出錯時的異常日誌。

internal

sealed

public t channel }

#region idisposable members

public

void dispose()

private

bool disposed;

private

void dispose(bool disposing)

catch (communicationexception)

catch (timeoutexception)

catch (exception)}}

disposed = true;

}#endregion

}

using (var scf = wcfserviceclientfactory.createserviceclient())

使用的直接是契約介面,不需要scf.channel.xx(),不需要using。最後,來看看logservice的真實**,乾淨多了:

public

override imessage invoke(imessage msg)

catch (exception ex)

else

}return methodreturn;

}}

即使出錯也不會再呼叫日誌服務,而是記錄本地日誌,實現了乙個比較簡單的本地日誌服務:

static locallogservice()

public

static

void log(string text)

WCF實現雙工通訊及客戶端呼叫

新建乙個windows窗體應用程式 即客戶端client 和乙個wcf服務庫 wcf雙工 在wcf雙工專案下 新建一歌ilogger介面和實現該介面的logger類 在ilogger介面中 using system using system.collections.generic using sys...

CAS單點登入三 客戶端獲取登入資訊

通過上篇的配置,登入是從資料庫中進行驗證了。那麼現在要解決的問題是,客戶端怎麼知道登入者是誰呢?如何獲取登入者的資訊。首先還是開啟deployerconfigcontext.xml這個配置檔案 找到id為attributerepository的bean。預設這個bean配置的應該是org.jasig...

PHP漏洞全解 三 客戶端指令碼植入

客戶端指令碼植入 script insertion 是指將可以執行的指令碼插入到表單 動畫或超連結文字等物件內。當使用者開啟這些物件後,攻擊者所植入的指令碼就會被執行,進而開始攻擊。可以被用作指令碼植入的html標籤一般包括以下幾種 1 無限彈框 插入跳轉釣魚頁面 或者使用其他自行構造的js 進行攻...