最近要在Linux上移植一套.net開發的B/S系統,首先需要部署一個WCF服務,系統選用CentOS,現用虛擬機器測試,已安裝mono 2.10.6,xsp2,mod_mono和httpd,一切部署,建立測試用的aspx頁面,訪問正常,xsp的測試網站也全部正常.
安裝方法 http://www.cnblogs.com/aquilahkj/archive/2011/11/03/2234380.html#
編輯/etc/httpd/conf.d/mod_mono.conf
在下方加入 AddType application/x-asp-net .svc 這樣mod_mono才會解析WCF的svc頁面.
建立測試用的WCF程式放進伺服器,輸入地址訪問服務svc頁面,報500錯誤
Contract 'MyWcfApp.IService1' was not found in the implemented contracts in this service host.
google很久也沒有結果,測試服務在windows下正常訪問,無任何問題,無論怎修改方法和特性標籤也沒用,折騰到最後,發現~~原來是編譯版本的問題,在windows下使用了3.5的的framework編譯,改為4.0就沒有問題,原因應該是我們mod_mono.conf中,把MonoServerPath設定為mod-mono-server4,所以需要用4.0的架構編譯.
用4.0編譯後再次開啟串連,返回soap錯誤
anyType was already contained in the schema object table. Consider setting MONO_STRICT_MS_COMPLIANT to 'yes' to mimic MS implementation. Related schema item SourceUri
google了文章 http://archive.cnblogs.com/a/2113112/ 發現應該是環境變數的問題,需要設定環境變數MONO_STRICT_MS_COMPLIANT=yes
有兩個方法解決:
1. 在WCF網站中新增Global.asax檔案,修改代碼如下
protected void Application_Start(object sender, EventArgs e)
{
#if MONO
Environment.SetEnvironmentVariable("MONO_STRICT_MS_COMPLIANT", "yes");
#endif
}
2.修改/etc/rc.d/init.d/httpd
在末端添加如下代碼:
MONO_STRICT_MS_COMPLIANT=yes
export MONO_STRICT_MS_COMPLIANT
httpd作為服務隨系統啟動時,加入該環境變數,並export
配置完成後,在windows編寫測試用戶端測試,能正常調用,但每次首次調用時串連時程式卡了10多秒,之後請求就很快了,不知原因為何,還望指點,另外如果我在服務端拋出異常時,用戶端就報一下錯誤
Addressing Version 'AddressingNone (http://schemas.microsoft.com/ws/2005/05/addressing/none)' does not support adding WS-Addressing headers.
不會報我伺服器實際的異常錯誤.也找不到解決方案,但當把用戶端部署在CentOS直接調用訪問服務端時,串連只卡了1秒多,並且也能拋出真正異常.估計是mono產生的SOAP請求問題吧.