天天看點

WCF 入門教程二

基本知識:

[servicecontract] attribute 可以有以下property 的:

callbackcontract 設定callback的類型:duplicate指service host和client之間進行雙向通信

configurationname 指定配置檔案中某個configuration的名字

hasprotectionlevel 标示是否可以處理安全消息

name 給contract指定一個名字,在client端可見的名字,預設就是接口名字

namespace 給消息指定一個命名空間

protectionlevel  

sessionmode 指允許,還是不允許,還是強制session

[operationcontract] attribute 可以有以下property 的:

action 對請求設定ws-addressing 的action

asynchpattern 異步模式

hasprotectionlevel 消息是否加密,簽名

isinitiating 表明該函數被調用開始時是否要在server上面初始化一個session

isoneway 表明函數被client調用以後,client是否會等待函數傳回

isterminating 表明該函數被調用結束時是否要在server上面關閉session

name 設定函數的名字,在client端可見的名字,預設就是函數名字

replyaction 設定函數傳回消息的soap action

1、 在網上看資料會看到各種給servicecontract的namespace、name等屬性指派的代碼,但這些attribute 是在哪裡起作用呢?

WCF 入門教程二

下面就讓我們一起來看看,打開上篇中的解決方案wcffirstdemo.sln

右鍵wcfservicedemo項目下面的檔案:test..svc,如下圖:

WCF 入門教程二

效果如下:

WCF 入門教程二

點選紅框中的連結,效果如下:

WCF 入門教程二

可以看到預設namespace是http://tempuri.org/,name與類名一緻

微軟官方建議:修改service的namespace,使其包含:公司域名+項目名+版本号(如:日期表示版本号)

小注:

WCF 入門教程二

修改項目:wcfservicedemo下面的itest.cs代碼如下:

右鍵項目wcfservicedemo選擇重新編譯,成功以後,重新用浏覽器打開itest.svc,得到如下圖:

WCF 入門教程二

此時已經改變了service預設的namespace了,重新生成一下部署包,部署到伺服器上,然後更新一下client端,然後重新編譯整個解決方案,會報錯如下:

WCF 入門教程二

此時servicecontract的那麼已經改成jiankunking而不是之前的test了,如下圖:

WCF 入門教程二

修改完錯誤後,浏覽一下client端的app.config檔案,如下,可以看到bindingconfiguration、contract、name等屬性都已經修改了

WCF 入門教程二

可以與修改之前的app.config檔案對比一下:

WCF 入門教程二

由此看見servicecontract的namespace、name等等屬性,可以起到重命名的作用,隐藏掉服務端類的真實資訊,用戶端看到的是你想讓其看到的

WCF 入門教程二

servicecontract做的工作是指定service向client提供了哪些函數可供調用。

源碼:http://download.csdn.net/detail/xunzaosiyecao/8503001