0

WinFormsクライアントとバックエンドサーバーの間に配置するために、wcfルーティングサービス(IIS 7.5)をセットアップしました。

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マネージャーで、URL書き換えモジュール内で許可されたサーバー変数としてHTTP_ACCEPT_LANGUAGEを設定しました。私は何が欠けていますか?

4

1 に答える 1

0

URLの書き換えが原因ではなかったことが判明しました。URLの書き換え後に行われるWcfルーティングは、私のhttpヘッダーを操作していました。

それを修正するには、変更するだけで済みました

<routing filterTableName="filterTable" />

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

serviceBehaviorで

そしてpresto-問題はなくなりました!これは、構成に追加したURLの書き換え中にhttpヘッダーの処理を削除できることも意味します。

私のCS教授は、「問題が見つからないのは、どこか別の場所にあるからだ」と言ったときに頭を打った。

于 2012-08-17T10:00:58.820 に答える