2011-12-07 28 views
7

我知道還有其他類似的問題,但我一直無法找到工作響應。添加服務參考不生成代理

我使用GetData()和GetDataUsingDataContract()附帶的模板創建默認的WCF服務。
它在瀏覽器中運行正常。

我有一個單獨的網站,而我添加這個新的WCF服務:

我「添加服務引用」,進入我的網址,服務上來,我點擊「確定」添加它。
在'App_WebReferences'下,我看到了我添加的服務的名稱空間:'ServiceReference1',其下有'References.svcmap',下面有一對.svcinfo/.wsdl/.xsd文件。

沒有創建代理文件,但<system.serviceModel>元素被添加到我的web.config,似乎是正確的信息。

,但是由於沒有代理,我不能訪問/調用我的服務有任何方法(即ServiceReference1.WCFMethod1()

我可以叫SvcUtil工具,生成代理,將其添加到我的App_Code文件,並且一切正常,因爲它應該。
我的問題是,爲什麼我的代理不是用'添加服務引用'創建的?
一切的目標框架下:.NET Framework 4的

編輯:

剛剛創建了一個控制檯應用程序,並增加了服務的參考,它創建代理。 所以問題是我的網站沒有創建代理...

+0

您是否將使用(Imports for VB.NET)語句添加到嘗試調用服務的頁面的代碼隱藏?即,「使用 .ServiceReference1;'或類似的東西? – Tim

+0

如果您使用的是網站「項目」(文件 - >新網站),則它不會創建代理,並且不會構建,直到運行時。 –

+1

約翰,是的,我正在使用它。那麼,除了使用svcutil之外別無他法嗎? – eych

回答

2

當你添加一個ServiceReference:引用 - >添加新的服務引用。 在高級按鈕上Clik並取消選中「在所有引用的程序集中重用類型」。 此選項有時會導致錯誤。

3

我有這個相同的問題,發現取消選中在所有引用的程序集的重用類型確實解決了問題。但是,就我而言,我需要它重用某些引用的庫中的類型。我發現this post,涵蓋了一個非常類似的問題。在那篇文章引用了一個Microsoft knowledge-base article描述修復了以下問題:

考慮以下情形:

  • 創建在Visual Studio 2012的ASP.NET MVC4的Web API項目。
  • 您在項目中添加一個WCF服務引用。

在這種情況下,服務引用的Reference.cs文件是空的。

原因

出現此問題的原因DataContractSerializer類遇到一個類型(Newtonsoft.Json.Linq.JToken),它不支持。在這種情況下,它會引發異常,然後停止生成服務引用。

我沒有引用該JSON庫,但是基於該錯誤描述,我推測我的一個引用的庫必須有類似的問題。我想,我所引用的一個庫可能包含一個DataContractSerializer不支持的類型,它拋出了相同類型的異常,因此它以相同的方式失敗。

果然,我發現,在我的情況下,罪魁禍首是我自己的圖書館之一,恰巧包括一個公共代理爲同一個WCF服務。我懷疑這是導致麻煩的公開代理。無論如何,通過選擇在指定引用程序集中重用類型,然後選擇所有程序集那一個,服務引用自動生成代理類正確。

2

這是主要問題。 問題的根源在於您無法在Visual Studio中找到添加Web引用。如果服務是asmx,在我的情況下它不會生成代理類,直到我找到這些步驟 - >點擊Sercice參考 - >點擊高級 - >在那裏您將看到添加Web引用...提供您的服務URL點擊確定問題解決了。 希望這有助於。