2013-03-12 56 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); 
    } 
} 
相关问题