簡體   English   中英

如何在多個WCF服務和Web端之間使用(共享)數據合同或數據類型

[英]How can I Use (Share) Datacontract or Datatype between multiple WCF service and web side

我有一個服務項目,名稱為SERVICE_ABC

(您可以在此鏈接中下載我的示例項目)

在這個項目中,我定義了3個WCF服務:

  • 服務_A
  • 服務_B
  • 服務_C

這3個服務在SERVICE_ABC項目中使用相同的數據協定類。 例如,這3個服務使用PersonelDTO類作為數據合同。

Web服務截圖-1

Web服務截圖2

我的問題是:如果我調用返回PersonelDTO類型的服務函數,則必須得到如下結果:

ServiceReference_A.PersonelDTO DataA = clientA.GetMyData();
ServiceReference_B.PersonelDTO DataB = clientB.GetMyData();
ServiceReference_C.PersonelDTO DataC = clientC.GetMyData();

但我想這樣定義:

PersonelDTO DataA = clientA.GetMyData();
PersonelDTO DataB = clientB.GetMyData();
PersonelDTO DataC = clientC.GetMyData();

(如果這樣做,Visual Studio會出現類似“ PersonelDTO是ServirceA,ServiceB和ServiceC之間的模棱兩可的引用”之類的錯誤。)即,我想在MVC Controller中僅使用一種數據類型。 因為PersonelDTO類在SERVICE_ABC項目中是相同的。 所以我不想像blabla1.PersonelDTO,blabla2.PersonelDTO那樣專門化每個PersonelDTO。

MVC項目屏幕截圖

我怎樣才能做到這一點?

我自己找到了解決方案。 (但我必須這樣說,您的回答很薄弱。)

解決方案:1-)首先,我們必須生成一個新的類庫。 右鍵單擊主要服務解決方案,然后選擇
添加>添加項目>類庫,並命名為SampleLibrary

2)生成該類庫中的所有數據傳輸對象分類(DTO分類)。 (例如, 右鍵單擊>添加>類,並命名為 PersonelDTO.cs)

3-)右鍵單擊類庫,然后單擊“ 重建 ”按鈕。

4-)現在我們建立SampleLibrary.dll文件。 我們將同時使用我們的服務解決方案和MVC Web解決方案的.dll文件。 根本沒有

選擇SERVICE_ABC解決方案>參考,然后右鍵單擊。 選擇添加引用>瀏覽選項卡>單擊瀏覽按鈕

5-)在“瀏覽”窗口中,選擇SampleLibrary.dll並將此文件添加到WCF服務作為參考。 (您可以在C:\\ test \\ SERVICE_ABC \\ SampleLibrary \\ bin \\ Release \\ SampleLibrary.dll或... \\ Debug \\ SampleLibrary.dll路徑中找到此文件。如果將項目構建為Debug Mode,則將在Debug中獲取該文件。如果以發布模式構建,則.dll文件將位於“發布”文件夾中)

6-)在WCF服務中使用類庫的數據傳輸對象文件。 例如,在服務中定義如下:

public FooDTO GetFoo()
    {            
        return new SampleLibrary.FooDTO() { Name = "Service A" };
    }

    public BarDTO GetBar()
    {
        //or add using SampleLibrary; definition begining of the pages 
        //and write just as BarDTO without SampleLibrary.BarDTO
        return new BarDTO() { Name = "Service A" };
    }

7-)重建並運行WCF服務。 (Service_ABC)

8-) 復制 WCF Services在Service \\ bin文件夾中生成的SampleLibrary.dll文件。 (例如,您可以在C:\\ test \\ SERVICE_ABC \\ SERVICE_ABC \\ bin文件夾中找到它)

9-)將此SampleLibrary.dll文件粘貼到MVC Web解決方案的bin文件夾中。 (例如,您可以在C:\\ test \\ WEB_ABC \\ WEB_ABC \\ bin文件夾中找到它)

10-)選擇您的Web Mvc解決方案>引用,然后右鍵單擊>添加引用>瀏覽選項卡>瀏覽按鈕

11-)選擇我們在步驟9上粘貼的SampleLibrary.dll,然后在您的Web Mvc解決方案中將此dll文件作為參考添加。

12-)關閉您的Web解決方案,然后重新打開。 (因為當您運行Update Service Reference命令時,解決方案無法正確獲得設置的可重用數據類型。您必須重新啟動Vusial Studio才能重新加載所有dll文件)

13-)右鍵單擊您的服務參考(在上圖中:ServiceReference_A,ServiceReference_B或ServiceReference_C),然后選擇“更新服務參考”
(請確保:選擇了“在所有引用的程序集中使用類型”選項,如果您不知道是否選中了該選項,則右鍵單擊服務引用並選擇“配置服務引用”,然后在打開的窗口中找到它)

所有這些..在此過程之后,我的WCF服務(SERVICE_ABC)和我的Web Mvc項目使用了相同的類庫dll文件。 並且,如果我在SERVICE_ABC中定義了多個服務,並且在MVC端使用相同的Type定義獲得了該服務。 即此代碼現在可以正常工作。

//ServiceReference_A.PersonelDTO DataA = clientA.GetMyData();//old
//ServiceReference_B.PersonelDTO DataB = clientB.GetMyData();//old 
//ServiceReference_C.PersonelDTO DataC = clientC.GetMyData();//old

PersonelDTO DataA = clientA.GetMyData();//new definition
        PersonelDTO DataB = clientB.GetMyData();//new definition
        PersonelDTO DataC = clientC.GetMyData();//new definition

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM