2013-01-03 23 views
3

安裝studio 2012後,構建一個面向框架4.0的應用程序。 我得到的錯誤:使用studio 2012構建後的任務序列化問題

Type 'System.Threading.Tasks.Task' cannot be serialized. 
Consider marking it with the DataContractAttribute attribute, and marking all of its members you want serialized with .... 

我已經使用SvcUtil工具重新生成服務引用。 是否有任何指定從參考中排除所有異步內容的方法?

+0

你對你的服務有一個公共的方法,它需要'Socket'作爲參數嗎? –

+0

那麼,你有沒有記得用「DataContractAttribute」標記它? – Janman

回答

2

我不明白爲什麼,但似乎在某些構建環境中,您需要將開關/syncOnly添加到svcutil命令行,該命令行在升級到Visual Studio 2012之後爲您的服務生成接口。奇怪的是,如果我使用Visual Studio 2012在我的桌面上本地構建和運行,我將所有異步方法添加到界面中,並且一切正常。但是,如果我在獨立的構建機器上構建並在第三臺機器上運行,那麼我會遇到類似於您所描述的錯誤。當我將/syncOnly添加到命令行時,錯誤消失,如http://www.aspdotnethelp.com/a/d/type-system-threading-tasks-task1system-string-cannot-be-serialized-error-in-wcf-236.aspx

中所述。這會導致不生成Async接口成員。

我也看到了異步方法包含導致不同的錯誤:

Operations marked with IsOneWay=true must not declare output parameters, by-reference parameters or return values.

我懷疑的原因牯周圍使用.NET 4.5工具來構建.NET 4.0應用程序。由於這些工具正在生成代碼而不是編譯代碼,因此它們的目標版本並未在輸出中強制執行。然後,當您在面向.NET 4.0的應用程序中使用用於.NET 4.5的代碼時,某些行爲不同步。