我在我的网站A上托管了一个WCF服务。我还有另一个站点B,它使用IIS URL重写将所有请求重定向到我的站点A.但是,站点B不处理对.svc文件的任何请求,返回404未找到。知道如何让它工作吗?
UPD重定向配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Redirect" stopProcessing="true">
<match url=".*" />
<action type="Rewrite" url="http://localhost/site_A/{R:0}" logRewrittenUrl="true" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
我发现网站A(!)的IIS日志中没有对.svc文件的任何请求。它不会将这些请求重定向到站点A.但是,当我从站点B请求.htm文件时,它会正确地将它们重定向到站点A.
答案 0 :(得分:1)
我不确定,但据我记得,如果您在网站B上没有.svc的http处理程序,可能会发生这种情况
答案 1 :(得分:1)
即使您要在IIS中添加.SVC处理程序并以与执行.HTM请求相同的方式重定向它,重定向也不会保留消息正文。因此,对SiteB上的服务方法的请求不一定与SiteA上的服务方法调用相同 - 这取决于您的配置,是否以RESTful方式公开,以及您的绑定是什么。
您可以查看WCF 4.0's Routing功能。这要求您编写某些逻辑来识别呼叫并让它调用另一个端点。
一个'更加'的解决方案是让SiteB托管一个代理服务,它只接受传入的请求并调用SiteA的等效服务,获取结果并将其返回给调用者。
答案 2 :(得分:1)
如果您仍然需要服务器处理包括某些服务在内的其他常规流量,一种选择是创建一个仅用于重定向的应用程序池,而该池没有托管代码。
示例:
假设您希望所有内容http://Websites/WcfServices重定向到其他地方。
首先,请确保已安装URL Rewrite和ARR并设置反向代理。 (请注意,您也可以将入站重写规则更改为指向特定路径,而不仅仅是其他服务器)
为WcfServices创建没有托管代码的应用程序池:
确保WcfServices使用新的应用程序池:
在这一点上,由于无法加载.net模块,因此WCF无法拦截对http://Websites/WcfService/CustomerDetails.svc之类的调用。所有流量都将路由到反向代理中设置的内部服务器。