Joh*_*ith 6 .net c# asp.net asp.net-mvc
我有一个Web应用程序,它是几个不同服务器的网格,1个服务器是前端服务器,它处理所有请求外部传入请求.
因此,其中一些请求必须传递给不同的服务器,理想情况下,我唯一想要更改的是这些请求的主机和Uri字段.有没有办法将整个传入请求映射到新的传出请求并只更改几个字段?
我试过这样的事情:
// some controller
public HttpResponseMessage get()
{
return this.Request.Rewrite("192.168.10.13/api/action");
}
//extension method Rewrite
public static HttpResponseMessage Rewrite(this HttpRequestMessage requestIn, string Uri) {
HttpClient httpClient = new HttpClient(new HttpClientHandler());
HttpRequestMessage requestOut = new HttpRequestMessage(requestIn.Method, Uri);
requestOut.Content = requestIn.Content;
var headerCollection = requestIn.Headers.ToDictionary(x => x.Key, y => y.Value);
foreach (var i in headerCollection)
{
requestOut.Headers.Add(i.Key, i.Value);
}
return httpClient.SendAsync(requestOut).Result;
}
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,这有很多问题.如果请求是get,则Content不应设置.标题是不正确的,因为它也复制像主机之类的东西,之后不应该触及等等.
有没有更简单的方法来做这样的事情?
我必须在 Silverlight 解决方案的 C# 代码中执行此操作一次。这并不漂亮。
您想要的称为反向代理和应用程序请求路由。
首先,反向代理解决方案......它们相对简单。
以下是Scott Forsyth和Carlos Aguilar Mares 的指南,介绍如何在 IIS 下使用 web.config 创建反向代理。如果您不喜欢正常的解决方案,这里有一个名叫 Paul Johnston 的家伙编写的模块。所有这些都集中在 IIS 上。
非 IIS 反向代理更常见于负载平衡。通常它们是基于Apache 的或专有硬件。它们的价格从免费到昂贵不等。原谅俚语。
为了保持客户端视角的一致性,您可能需要的不仅仅是反向代理配置。因此,在采用纯反向代理路线之前……有一些注意事项。
服务器可能需要共享机器密钥来同步视图状态和其他内容,并共享会话存储。
如果这还不够一致,您可能需要通过应用程序请求路由(查找服务器关联性)来实现会话粘性,以便给定的会话 cookie(或 IP 地址,或者可能让它生成令牌 cookie)将用户映射到相同的会话。服务器处理每个请求。
| 归档时间: |
|
| 查看次数: |
989 次 |
| 最近记录: |