如何从部署在另一台服务器上的MVC4.net应用程序调用部署在远程服务器上的Servicestack服务

本文关键字:部署 服务器 net MVC4 应用程序 服务 Servicestack 调用 一台 | 更新日期: 2023-09-27 18:00:57

我是Servicestack的新手,正在尝试为我的当前项目实现它。现在我在一台服务器上部署了MVC.NET应用程序(说http://server1:8080)和部署在不同服务器上的servicestack服务(比如http://server2:9080)。

我已经通过了

https://github.com/ServiceStack/ServiceStack/wiki/Mvc-integration

但我不知道如何将其更改为呼叫服务http://server2:9080

如何从MVC控制器调用服务

    Service code is as following  

//APPHOST.cs

    public class AppHost : AppHostBase
        {
            public AppHost() : base("Flight app host",
                typeof(flightService).Assembly) { }
            public override void Configure(Container container)
            {
            }
        }

//请求DTO

    [Route("/flights/","POST")]
        [Route("/flights/{departure}/{arrival}","POST")]
        public class TravelServiceRequest : IReturn<TravelServiceResponce>
            {
                public string departure { get; set; }
                public string arrival { get; set; }
            }

//响应DTO

    public class TravelServiceResponce
        {
            public string departure { get; set; }
            public string arrival { get; set; }
            public string airline { get; set; }
            public decimal fare { get; set; }
            public DateTime arrivalTime { get; set; }
            public DateTime departureTime { get; set; }
        }

//服务

public class flightService:Service
    {
        public object Post(TravelServiceRequest request)
        {
            var response = new TravelServiceResponce
            {
                departure =request.departure,
                arrival =request.arrival,
                airline="jet airways",
                fare =677,
                arrivalTime =new DateTime(2014,12,12,5,6,2),
                departureTime = new DateTime(2014,11,12,5,6,2)    
            };
            return response;
        }
    }
  // Gloable.asax.cs file 
public class Global : System.Web.HttpApplication
    {
        protected void Application_Start(object sender, EventArgs e)
        {
            var appHost = new AppHost();
            appHost.Init();
        }
}

在我的MVC应用程序中

public class HomeController : Controller
    {
        public ActionResult Index()
        {
            //call service from here 
            return View();
        }
}

我有c#代码可以调用此服务,但我不确定这是否是在MVC控制器中使用的最佳方式

           var client = new JsonServiceClient("http://server2:9080/");
            var responce = client.Post(new TravelServiceRequest
            {
                departure = departure,
                arrival = arrival
            });

请帮我找到在MVC中调用远程服务的最佳方式。

如何从部署在另一台服务器上的MVC4.net应用程序调用部署在远程服务器上的Servicestack服务

进程外调用ServiceStack服务

如果ServiceStack和MVC没有托管在同一个Web应用程序中,那么您只需访问ServiceStack服务,就像从任何.NET服务客户端访问一样,使用ServiceStack服务器DTO和.NET服务客户端,例如:

var response = client.Post(new TravelServiceRequest { ... });

共享服务器DTO.dll的另一种选择是使用AddServiceStackReference提供的VS.NET集成,该集成允许您从远程url生成服务器DTO。

ServiceStack+MVC在过程

如果ServiceStack和MVC一起托管在同一个AppDomain中,请参阅ServiceStack与MVC的集成,该集成允许您的控制器通过继承ServiceStackController来访问ServiceStack的大部分功能。

然后,您可以使用在MVC控制器中执行进程中的ServiceStack服务

var response = base.Execute(new TravelServiceRequest { ... });

这相当于从IOC解析ServiceStack服务并直接调用它,您可以这样做,例如:

using (var service = base.ResolveService<TravelServices>())
{
    var response = service.Post(new TravelServiceRequest { ... });
}