我有一個奇怪的問題,我似乎無法診斷,它似乎是PEBCAC的事情,但我花了很多時間試圖解決它。我創建了一個通過Windows服務託管的WCF服務。這項服務一直工作得很好,我有一個Windows窗體和一個Web界面。該服務最初是在XP上開發的,但我最近已遷移到Windows 7.當我遷移時,我發現該服務的Windows安全性阻止了我在Windows 7上使用我的WinForms應用程序,但它在XP上交談時工作得很好Windows Server 2008 R2,Windows 7和XP上的服務。爲了簡化發展過程中的事情,我完全禁用了安全性,並且我的WinForms應用程序再次在Windows7上運行。WCF無法生成客戶端代理
然後,我對WCF服務進行了一些其他更改,添加方法,更改數據協定等。唯一的端點更改是禁用wshttp的安全性。突然間,更新Web應用程序的服務引用不再創建客戶端代理,但它確實生成了wsdl和xsd文件。我曾嘗試在XP和Win7的新舊服務的衆多組合與結果:
- 老服務更新基準時正常工作,無論它運行在XP或WIN7和是否Web應用程序代碼在XP或Win7上。
- 新服務不會創建代理,無論是在XP還是Win7上運行,以及Web應用程序代碼是在XP還是在Win7上。我從服務參考更新中得不到任何錯誤,但是,
configuration.svcinfo
和configuration91.svcinfo
文件沒有列出行爲,綁定或端點。其餘的文件看起來很好。 - 我可以使用
svcutil
來獲取元數據並使用新版本的服務生成代理代碼。 - 更新服務引用時,我確實得到了兩個作爲數據協定一部分的項目,它們顯示在對象資源管理器中,但只有其中一個是正確的。我沒有得到任何客戶或其他數據合同對象。
- 踢球者是,Windows窗體應用程序工作得很好,包括更新引用和調用服務方法。咦?
我看過新服務中的服務,行爲和端點定義,它們與舊服務相匹配。沒有網上,我可以找到引用這樣的錯誤。我意識到我必須在新代碼中做錯了什麼,但是由於它在WinForms應用程序中正常工作,所以我無法解釋這種差異。
任何幫助將不勝感激。或許我可以保留一些我的頭髮;)
CNC中
閱讀我做了一些調查研究,答案後和嘗試了一些更多的東西:
我已經看過了XSD, etc文件,這些服務沒有任何安全性,並且在事務恢復之後,它們以DataContract
屬性的頂級枚舉方式(不具備這些屬性)並且還將安全值恢復到原來的狀態。在這兩種情況下,我都沒有看到任何不妥之處,除了這些文件的命名方式不同:舊的服務引用使用xsd文件,其數字後綴範圍爲2 - 5,而最新的一個使用1 - 4(不能看到這應該影響的東西,因爲svcmap中的指針似乎是正確的)。它確實使事情變得更加困難,但我仔細查看了每個文件,數據似乎是正確的,只是放在了不同的文件中。
WSDL文件,安全恢復到舊值後,除了主機IP和機器名,符合市場預期一致。但configuration.svcinfo
和configuration91.svcinfo
仍沒有定義的端點,行爲或綁定。另外,奇怪的是,在確定的兩個數據合約中,只有一個新成員:其數據成員不存在。這是引用標記爲Serializable
但未列入DataContract
屬性的類的數據合同。唯一改變的地方是我爲該類添加了一個新的字符串成員。更奇怪的是,在xsd文件中有一個合適的數據約定類的定義。
我很困惑。
有趣的是,我正好在頂部水平的變化部分添加一個枚舉,我會在差異比較的XSD,看看還有謝謝 - !。我永遠不會想到這樣的問題,你是怎麼解決你的問題的? – 2010-12-12 02:11:10
我們發現(偶然)一些解決方法。 e是通過將枚舉包裝到其他結構中來將枚舉向下移動。更好的解決方法之一是確保MessageBodyMemberAttribute的Name屬性與枚舉的類型相同。 – 2010-12-13 18:35:18