0

次の操作コントラクトを持つ WCF サービスがあります。

    [OperationContract]
    [WebGet(BodyStyle = WebMessageBodyStyle.Wrapped, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "/VerifyKeys.json/{customerKey}/{userKey}")]
    [return: MessageParameter(Name = "MyDetail")]
    MyDetail VerifyKeys(string customerKey, string userKey);

私の方法は次のようなものです:

    public MyDetail VerifyKeys(string customerKey, string userKey)
    {
         ...
         return _myDetail;
    }

私のリクエストは次のようなものです:

    http://mydomain.com/MyService.svc/web/VerifyKeys.json/FE3D0F1D-5B8B-4677-B332-70B7ABA80A97/08F4349A-30E5-457D-F2BD-70A23CE17F41?deviceId=66345ec6-a5fe-4b5f-8cf2-1b0d8c344dc2&deviceToken=AgTGERCBaS3d8n2QWxF9EtwcLktIoygoXpc8Y42ObZWja3RSjN%2bFBeshaY4ASainj3MusBbVopXbUFQrrgXUOSkAbOA7tChNKOFNKQ2gB8sEfCe5Du9BZufW4bAP5312MKRqV8g%3d&deviceType=Pink24

このメソッドを呼び出すアプリケーションのバージョンが異なります。新しいメソッドを作成するのではなく、最後にクエリ文字列を使用しました。URL を解析することで、必要な追加パラメーターを取得できます。すなわち。deviceToken、deviceId、および deviceType

deviceToken パラメータが小さい間、私のリクエストは正常に機能しました。現在、デバイス トークンを提供している会社は、非常に巨大なトークンを作成しています。そして今、私のリクエストは Bad Request 400 を返します。

    AgTGERCBaS3d8n2QWxF9EtwcLktIoygoXpc8Y42ObZWja3RSjN%2bFBeshaY4ASainj3MusBbVopXbUFQrrgXUOSkAbOA7tChNKOFNKQ2gB8sEfCe5Du9BZufW4bAP5312MKRqV8g%3d

これらの文字をクエリ文字列の末尾から削除すると、リクエストは正常に処理されます。"Q2gB8sEfCe5Du9BZufW4bAP5312MKRqV8g%3d"

いくつかの調査を行ったところ、パラメーターの最大文字数は 255 文字であることがわかりました。私のデバイス トークンは 140 しかありません。

さらに混乱を招くのは、deviceId パラメーターと deviceToken パラメーターの順序を変更した場合、正常に送信するには deviceId パラメーターを短くする必要があることです。もう 1 つの興味深い点は、他のパラメーターのいずれかを短縮しようとすると、要求が失敗することです。常に 2 番目のパラメーターを短くする必要があります。

他の誰かが同様の問題を抱えていて、解決策を見つけましたか?

パスの末尾にあるクエリ文字列を介して looong デバイス トークンを送信するにはどうすればよいですか?

4

2 に答える 2

1

パラメータではなく、クエリ文字列自体の長さである可能性があります。

追加してみる

<httpRuntime maxQueryStringLength="2500" 
maxUrlLength="2500" maxRequestLength="2500" />

構成に追加して、エラーが続くかどうかを確認します

于 2013-01-15T23:49:52.630 に答える
0

この質問を投稿した後、解決策を見つけました。そのような方法がよくあります。

デバイス トークンは、NVARCHAR(100) のフィールドに保存されていました。以前はこれで十分でした。デバイス トークンは 140 文字以上にすることができます。フィールドを NVARCHAR(255) に変更しました。問題は修正されました。もう悪いリクエスト 400 はありません。

于 2013-01-16T00:40:46.543 に答える