0

我已经设置了一个 wcf 路由服务 (IIS 7.5) 位于我的 winforms 客户端和后端服务器之间。

我正在尝试解决一个错误,该错误显然是由 http 标头“Accept-Language”的消失引起的。客户端在请求中发送此标头,但根据提琴手(以及我正在观察的行为),从 iis 发出的请求没有“Accept-Language”标头。这会导致服务器发回以 en-US 区域设置而不是客户端指定的区域设置格式的数据。

这个 url上,他们举例说明了如何做我想做的事。这是我基于此所做的配置(我已经在进行 url 重写)。serverVariables 部分应该解决我的问题:

<system.webServer>
 <!-- These url rewrite rules require the presence of the URL Rewrite 2.0 iis extension -->
 <rewrite>
  <rules>
   <!-- Accept connections to service1.asmx by rewriting that part of the url to WcfRouter.svc/service1 -->
  <rule name="service1Rule" stopProcessing="true">
   <match url="^(.*)svc/service1.asmx" />
   <serverVariables>
    <set name="HTTP_ACCEPT_LANGUAGE" value="da-DK" />
   </serverVariables>
   <action type="Rewrite" url="{R:1}WcfRouter.svc/service1" />
  </rule>
  <!-- Ditto for service2.asmx -->
  <rule name="service2Rule" stopProcessing="true">
   <match url="^(.*)svc/service2.asmx" />
    <serverVariables>
     <set name="HTTP_ACCEPT_LANGUAGE" value="da-DK" />
    </serverVariables>
    <action type="Rewrite" url="{R:1}WcfRouter.svc/service2" />
   </rule>
  </rules>
 </rewrite>
</system.webServer>

url重写工作正常。我唯一剩下的问题是 http 标头修改。在 IIS 管理器中,我已将 HTTP_ACCEPT_LANGUAGE 设置为 url 重写模块中允许的服务器变量。我错过了什么?

4

1 回答 1

0

原来 url 重写不是罪魁祸首。url 重写后发生的 Wcf 路由破坏了我的 http 标头。

要修复它,我只需要改变

<routing filterTableName="filterTable" />

<routing filterTableName="filterTable" soapProcessingEnabled="false" />

在服务行为中

和presto - 问题消失了!这也意味着我可以在我添加到配置中的 url 重写期间删除对 http 标头的处理。

我的 CS 教授说:“如果你找不到问题,那是因为它在其他地方。”

于 2012-08-17T10:00:58.820 回答