2012-04-19 10 views
4

.NET ASMX Webサービスが直接制御権を持っていないクライアントからの要求を受け入れています。それはこのようになりますリクエストの送信です:私のWebMethod属性で着信リクエストで間違ったエンコーディングを使用しているASMX Webサービス

POST /Service.asmx HTTP/1.1 
Connection: Keep-Alive 
Pragma: no-cache 
Content-Length: 1382 
Content-Type: text/xml 
Accept: text/xml 
Host: localhost 
User-Agent: Borland SOAP 1.1 
SOAPAction: "http://domain.com/InsertRecords" 

<?xml version="1.0"?> 
<SOAP-ENV:Envelope... <v>ÄLMÅ BÄCK</v></SOAP-ENV:Envelope> 

、アルマバックはLMを??するマングドます文字列を? B?CK - 典型的なエンコーディングの混乱。

私は単純にContent-Typeヘッダを微調整する場合は、すべてが順調であることを見つけた私のテストで

:それは未指定だとき

Content-Type: text/xml; charset=utf-8 

はなぜ.NET UTF-8以外のエンコーディングを選択して、このASMXにUTF-8エンコーディングを使用させてもらう方法はありますか?

答えて

2

次のコードの実行、Webサービス・ハンドラが呼び出される前には、正しく復号HTTPリクエストの結果:

if (HttpContext.Current.Request.ContentType == "text/xml") { 
    HttpContext.Current.Request.ContentType = "text/xml; charset=UTF-8"; 
} 

これは少しハック感じているが、私はそれが私のような状況のために働くだろうと信じています。私はこれがなぜ問題であったか、そしてこれを取り除く良い方法があるのか​​(クライアントにエンコーディングについてもっと明示的にさせることに加えて)、いくつかの背景情報には依然として非常に興味があります。

1

IIS 7.5には、これを行うための構成オプションがあります。 (以前のバージョンでこれがサポートされているかどうかはわかりません)私は、拡張ASCII文字セットの上位5文字を意味のある区切り文字として使用するシステムから要求を受け取るWebアプリケーションを持っているのと同様の問題がありました。これらは、IISが着信要求に適用していたデコードによって混乱していました。この問題を解決するためのIIS設定オプションがいくつか見つかりました。


まず、IISマネージャで、あなたのウェブサイトを選択して、.NETグローバリゼーションの設定を開きます。

IIS .NET Globalization Settings


ファイルに対して予想されるエンコーディングの設定、リクエスト、レスポンスヘッダがあります。 、およびレスポンス。選択するエンコーディングオプションの数十があります

Setting encodings in IIS


この特定のサイトが唯一の私が書いたので、私は両端を制御プログラムからの要求を受けたので、これは私のシナリオのために完全に働きました。未知のユーザー層では、ユーザーが要求を適切にエンコードすることを望んでいるだけです。 (ただし、デフォルトのエンコードを使用しても同様です...)

関連する問題