2009-10-29 99 views
6

產生錯誤,我有一個包含12的方法,其中一些返回原始類型,如布爾或字符串Visual Studio 2008中WCF服務項目。我也有一個引用已發佈的WCF服務的Visual Studio單元測試項目。當所有返回類型都是原始的時,測試項目會成功編譯。WCF服務的Reference.cs

如果我添加了新的方法,以返回自定義類的服務,發佈和更新的測試項目中的服務引用,它不會編譯。錯誤是: -

  1. 'PublisherFaultException'類型已包含'Reason'的定義。
  2. 類型'PublisherFaultException'已經包含'PropertyChanged'的定義。
  3. 類型「Publisher.Test.LibraryReference.PublisherFaultException」已經定義了一個名爲「RaisePropertyChanged」具有相同的參數類型成員。

所有自動生成的reference.cs文件。

爲WCF服務的方法,該合同是: -

Page GetItem(string path); 

和Page類具有DataContract屬性和它的公共屬性都將DataMember屬性。

我不願意修改Reference.cs文件,因爲我需要這個服務被更新都必須這樣做。

任何人都知道爲什麼會發生這種情況?

斯圖爾特。

+0

發生了什麼是WCF添加服務引用是一個婊子 - 我感到你的痛苦 – JohnIdol 2010-03-03 20:54:00

+0

你有沒有嘗試使用svcutil生成代理?我記得之前有過這個問題,並且是在使用FaultContract屬性創建自定義故障異常時。我不記得解決方案。所以希望我的意見可以幫助。我會繼續挖掘,看看我能否找到解決方案。嘗試使用SvcUtil.exe並查看發生了什麼並讓我們知道。 – CkH 2010-06-11 18:34:21

回答

1

當您添加服務引用,你「組裝重用類型」選項獲得 - 這很可能是關鍵整理出重複。

還是你有那些導致重複一些測試參考?

此外,在項目樹的參考部分看看,看看是否有任何意外的在那裏(你有2個組件既包含在相同的命名空間服務引用引用?)。

+0

選中「所有引用程序集中的重用類型」。應該是這樣嗎? 頁面類屬於一個程序集,它在VS解決方案中時並不直接被測試項目引用。 – 2009-10-29 10:23:16

+0

重複使用是一般的作品,雖然有[冗長的]論點,以這種方式避免共享合同。 PublisherFaultException是否在合約程序集中?它是否標有適當的合同屬性? (我沒有看到你正在看到的確切情況,但是通過追蹤參考文獻,我會是root的)。我認爲你已經點擊了項目資源管理器頂部的顯示所有文件按鈕,並查看references.cs以查看生成的代碼,以確定它可能與之衝突的內容。 – 2009-10-29 12:36:15

+0

PublisherFaultexception在更新服務引用時位於自動生成的Reference.cs文件中。它包含兩個針對PublisherFaultException的類聲明(這兩個部分類都可以),但都使用公共Reason屬性,PropertyChanged事件和RaisePropertyChanged方法。實際的ReportPublisherException類本身位於WCF項目中,並具有DataContact和DataMember屬性。 – 2009-10-29 13:13:46

1

使用自動生成的代理類它總是痛苦。

要處理像使用數據合同類和服務接口單獨組裝此我的情況。

合同DLL將有:


public interface IService 
{ 
    [OperationContract] 
    List GetContentList(); 
} 

[DataContract] 
public class ContentItem 
{ 
    [DataMember] public string Name; 
    [DataMember] public object Data; 
} 

客戶將有參考Contract.dll。 代理將被手動創建:


class ServiceProxy : ClientBase<IService>, IService 
{ 
    public List GetContentList() 
    { 
    return Channel.GetContentList(); 
    } 
} 

服務器DLL將參照同一合同DLL。 所以我們將能夠避免任何與自動生成的代理錯誤。 此外,手動創建的代理將更簡單,更易於管理。

0

添加服務引用時,請嘗試單擊高級,然後選擇「生成異步操作」。

我認爲發生的事情是在Web服務中有一些異步方法,名稱以「Async」結尾,這會與References.cs中生成的方法發生衝突。

例如設想Web服務包含兩種方法:(1)SayHello和(2)SayHelloAsync

使用基於任務默認方法生成生產:

  • SayHelloSayHelloAsync爲(1)
  • SayHelloAsyncSayHelloAsyncAsync爲(2)。

發生衝突是因爲有2個生成的方法,稱爲SayHelloAsync

至少我認爲這是怎麼回事。無論如何設置「生成異步操作」爲我工作。