2013-03-12 54 views
1

我希望創建一個將在服務器A上託管的服務(例如,URL:http://servera:807)。但我的主要應用程序需要在服務器B上託管(例如URL:http://serverb:801)。ServiceStack - 與主應用程序不同的服務器

我很好奇這是否可能?我的服務和主應用程序需要位於不同服務器上的原因是由於我無法控制的原因。目前的系統使用相同的設置WCF,我想擺脫這一點。

在實例中,服務和客戶端似乎都在相同的位置被託管/在同一個解決方案

+0

我們有一個類似的設置,在Web應用程序是一個Java應用程序它會調用在C#中創建的Rest服務。 Java應用程序管理用戶會話等。是否提到了Web服務的服務?或者是其中一個Web應用程序? – user356247 2013-03-12 15:05:53

+0

服務器A將是一系列ServiceStack服務暴露某些數據。服務器B上的一個將是一個Web應用程序(MVC 4)。 – CallumVass 2013-03-12 15:25:48

+0

在這種情況下,您可以在WebApplication中使用控制器操作,該操作需要調用ServiceStack服務的路徑,要傳遞的數據以及要使用的Http動詞。然後,客戶端可以用所需的一切來調用此操作方法,然後控制器操作可以使用數據調用approprite服務方法,獲取響應並將其傳回客戶端。 Web應用程序還可以管理用戶會話和其他請求上下文信息。 – user356247 2013-03-12 15:54:02

回答

3

下面是設置瞭解決方案/項目的潛力。這是簡單和不完整的,但我認爲有助於說明一個可能的設置。您還需要考慮您想要如何處理會話信息和身份驗證,因爲MVC和ServiceStack分開處理。見CustomAuthenticationMVC

ServerA.sln(ASP.NET Web應用程序)

  • ServiceModel項目 - 保持請求的對象和DTOS
  • serviceInterface等項目(這可以ServerA和ServerB上的解決方案之間共享) - 有服務實現
  • Global.asx - 具有Application_Start方法中配置ServiceStack

ServerB.sln(MV4應用)

  • ServiceModel項目(共享)
  • 瀏覽
  • 模型
  • 控制器
  • 在ServiceModel項目類

實施例:

[Route("/Foos")] 
public class Foos : IReturn<FoosResponse> 
{} 

public class FoosResponse 
{ 
    public FoosResponse() 
    { 
     this.ResponseStatus = new ResponseStatus(); 
    } 

    public ResponseStatus ResponseStatus {get; set;} 
} 

在serviceInterface等項目的類實例

public class FoosService : Service 
{ 
    public FoosResponse Get(Foos request) 
    { 
     return new FoosReponse(); 
    } 
} 

示例如何調用MVC4應用程序內ServiceStack API

public class FoosController 
{ 
    public ActionResult Index() 
    { 
     var client = new JsonServiceClient("http://servera:807"); 
     var response = client.Get(new Foos()); 
     return View(response); 
    } 
} 
相關問題