如何从部署在另一台服务器上的 MVC4.net 应用程序调用部署在远程服务器上的 Servicestack 服务?
How To Call Servicestack service deployed on remote server from MVC4.net application deployed on another server?
我是 Servicestack 的新手,正在尝试为我当前的 project.Now 实施它 我的 MVC.NET 应用程序部署在一台服务器上
(比如 http://server1:8080) and servicestack service deployed on different one (say 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 中调用远程服务的最佳方法。
在进程外调用 ServiceStack 服务
如果 ServiceStack 和 MVC 没有一起托管在同一个 Web 应用程序中,那么您可以像使用 ServiceStack 服务器 DTO 和 .NET Service Client 从任何 .NET 服务客户端访问 ServiceStack 服务一样,例如:
var response = client.Post(new TravelServiceRequest { ... });
另一种共享服务器 DTO .dll 的替代方法是使用 Add ServiceStack Reference 提供的 VS.NET 集成,它允许您从远程 url.[=17= 生成服务器 DTO ]
ServiceStack + MVC 进行中
如果 ServiceStack 和 MVC 一起托管在同一个 AppDomain 中,请参考 ServiceStack Integration with 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 { ... });
}
我是 Servicestack 的新手,正在尝试为我当前的 project.Now 实施它 我的 MVC.NET 应用程序部署在一台服务器上 (比如 http://server1:8080) and servicestack service deployed on different one (say 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 中调用远程服务的最佳方法。
在进程外调用 ServiceStack 服务
如果 ServiceStack 和 MVC 没有一起托管在同一个 Web 应用程序中,那么您可以像使用 ServiceStack 服务器 DTO 和 .NET Service Client 从任何 .NET 服务客户端访问 ServiceStack 服务一样,例如:
var response = client.Post(new TravelServiceRequest { ... });
另一种共享服务器 DTO .dll 的替代方法是使用 Add ServiceStack Reference 提供的 VS.NET 集成,它允许您从远程 url.[=17= 生成服务器 DTO ]
ServiceStack + MVC 进行中
如果 ServiceStack 和 MVC 一起托管在同一个 AppDomain 中,请参考 ServiceStack Integration with 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 { ... });
}