1

base64 でエンコードされた文字列をパラメーターとして受け取る残りの wcf 4.0 サービスがあります。casini を使用して Visual Studio でサービスを実行すると正しく動作しますが、IIS 7.5 で同じサービスを実行するとエラー 400 メッセージが表示されます。ブレークポイントがヒットしません。同じコードと web.config を使用してcasiniで動作するため、コードに問題はないと思います。

IIS 7.5 でサービスを機能させるには、どのような変更を加える必要がありますか?

これはURLです

http://localhost/MyServices/MyServ.svc/Accept/eyJXb3JkY291bnQiOjMwLCJJbWFnZWNvdW50IjoxMCwiU2VsZWN0ZWRMYW5ndWFnZXMiOlt7ImlkIjoxLCJsYW5ndWFnZTEiOiJIaW5kaSIsIkdyb3VwX0xhbmd1YWdlc19pZCI6bnVsbH0seyJpZCI6MSwibGFuZ3VhZ2UxIjoiTWFyYXRoIiwiR3JvdXBfTGFuZ3VhZ2VzX2lkIjpudWxsfSx7ImlkIjoxLCJsYW5ndWFnZTEiOiJGcmVuY2giLCJHcm91cF9MYW5ndWFnZXNfaWQiOm51bGx9LHsiaWQiOjEsImxhbmd1YWdlMSI6IkdFcm1hbiIsIkdyb3VwX0xhbmd1YWdlc19pZCI6bnVsbH0seyJpZCI6MSwibGFuZ3VhZ2UxIjoiSXRhbGlhbiIsIkdyb3VwX0xhbmd1YWdlc19pZCI6bnVsbH0seyJpZCI6MSwibGFuZ3VhZ2UxIjoic3BhbmlzaCIsIkdyb3VwX0xhbmd1YWdlc19pZCI6bnVsbH1dfQ==

ありがとう。

4

1 に答える 1

2

等号は URL で特別な意味を持ちます。パラメータキーをその値から分離します。末尾の等号を使用する方法では、IIS はそれを拒否します。

Base 64 エンコーディングでは、URL で特別な意味を持ち、問題を引き起こす追加の文字 (つまり+/) が使用されることに注意してください。したがって、URL セーフ文字のみを使用する修正された Base 64 エンコーディングを使用することをお勧めします。

通常、次の文字が置き換えられます。

+-/_=*

アップデート:

Base 64 エンコーディングに使用する Javascript コードは、簡単に変更できます。この行を置き換えるだけです:

var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";

var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_*";

return (r ? enc.slice(0, r - 3) : enc) + '==='.slice(r || 3);

と:

return (r ? enc.slice(0, r - 3) : enc) + '***'.slice(r || 3);

更新 2:

残念ながら、Base 64 URL は IIS では機能しません。IIS は、依然として URL のすべての部分をファイルまたはディレクトリ名として扱います。この実装には多くの問題があります (URL セグメントとして COM2 または PRN を試してみてください)。

別の URL スキームまたはリクエスト タイプを考え出す必要があります。POST リクエストを使用して Base64 でエンコードされた部分を送信するか、次のような URL を使用します。

http://server/MyServices/MyServ.svc/Accept?data=eyJXb3JkY291bnQiOjMwLCJ...VsbH1dfQ**

ただし、2 番目のケースは、URL が長すぎない場合にのみ機能します。1000 文字を超える URL が機能するとは想定していません。

于 2012-12-28T12:06:49.497 に答える