基本知識:
[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 是在哪裡起作用呢?
下面就讓我們一起來看看,打開上篇中的解決方案wcffirstdemo.sln
右鍵wcfservicedemo項目下面的檔案:test..svc,如下圖:
效果如下:
點選紅框中的連結,效果如下:
可以看到預設namespace是http://tempuri.org/,name與類名一緻
微軟官方建議:修改service的namespace,使其包含:公司域名+項目名+版本号(如:日期表示版本号)
小注:
修改項目:wcfservicedemo下面的itest.cs代碼如下:
右鍵項目wcfservicedemo選擇重新編譯,成功以後,重新用浏覽器打開itest.svc,得到如下圖:
此時已經改變了service預設的namespace了,重新生成一下部署包,部署到伺服器上,然後更新一下client端,然後重新編譯整個解決方案,會報錯如下:
此時servicecontract的那麼已經改成jiankunking而不是之前的test了,如下圖:
修改完錯誤後,浏覽一下client端的app.config檔案,如下,可以看到bindingconfiguration、contract、name等屬性都已經修改了
可以與修改之前的app.config檔案對比一下:
由此看見servicecontract的namespace、name等等屬性,可以起到重命名的作用,隐藏掉服務端類的真實資訊,用戶端看到的是你想讓其看到的
servicecontract做的工作是指定service向client提供了哪些函數可供調用。
源碼:http://download.csdn.net/detail/xunzaosiyecao/8503001