簡體   English   中英

如何使用C#和Visual Studio 2010在多個層之間共享服務引用類型

[英]How do I share Service Reference Types Across Multiple Tiers using C# and Visual Studio 2010

我的項目分為服務層項目和實施層項目。 兩者都是使用Visual Studio 2010用C#編寫的。服務層接受請求對象,並將其傳遞給實現層。 實現層操縱此對象,並將其傳遞給外部Web服務。 然后,外部Web服務的結果通過實現和服務層傳遞回客戶端。

跨每個層使用相同的請求和響應對象。

有沒有辦法可以在兩個層之間使用共享引用,並使用相同的引用與外部Web服務進行通信? 如果沒有,最整潔的方法是什么?

我希望避免維護特定於項目的服務引用,而是使用單個數據協定dll。 但是,當我使用這種方法時,我發現與外部Web服務方法進行通信時需要使用Webservice.Request而不是DataContract.Request。

一種方法是創建一個由服務層和實現層共享的模型。 當您收到來自Web服務的響應時,您可以將該對象轉換為您自己的模型並將其傳遞。 當您需要通過Web服務更新數據時,請將您的模型轉換回Web服務所請求的模型。

您可以創建一個類似的類:

public class MyCustomModel
{
    public int Id { get; set; }
    public string SomeValue { get; set; }
    // etc.
}

然后,您可以創建從WS轉換為自定義模型的擴展方法

public static class MyExtensions
{
    public static MyCustomModel ConvertToMyCustomModel(this MyCustomModel model, WebServiceModel wsModel)
    {
        var newModel = new MyCustomModel { Id = wsModel.Id, SomeValue = wsModel.SomeValue };

        return newModel;
    }
}

可以使用相同的方法將MyCustomModel轉換為WebServiceModel。 這樣,如果您更改Web服務或它指向另一個位置,則可以輕松地僅更新一個位置,而不用同時更改服務層和實現層。

不確定如何為服務創建代理。

以下步驟適用於Visual Studio“添加服務參考”功能。

  1. 將合同移至專用項目。 僅將聯系人存儲而不在此處實施。
  2. 為服務和客戶項目添加對合同項目的引用。
  3. 使用合同中的合同在服務中實施服務並運行服務。
  4. 在服務項目中添加服務參考。 確保選中“所有引用的程序集中的重用類型”。

結果,您應該在整個解決方案中使用的Contracts項目中定義了類。

步驟2在這里至關重要。 客戶端需要引用Contracts.dll,否則它不了解這些類型,並將基於WSDL生成新的類型。

暫無
暫無

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

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