0

だから私は最初の WCF プロジェクトを書きました。それは私のブラウザーと jquery を使用して動作しているように見えますが、クライアントを書き、物事が少し混乱しました...実際には、そのクライアントで行うすべてのことは 400 の悪い要求応答につながるようです。 ..だから私はいくつかの投稿を読んで、物事を整理する良い方法がフィドラーを使用していることを発見し、選び始めました...

フィドラーはクライアントを識別できないため、クライアントを使用してデータを直接クライアントに送信しました ... https://docs.google.com/file/d/0ByOtHJSZT_GtNHZqTVZMdVVqZEU/edit?usp=sharingスクリーンショットはこちら。

私が見ることができる唯一の違いは、いくつかのヘッダーのリークであり(これは私には本当に役に立たないようです)、1つはコンテンツタイプをapplication/jsonpとして使用し、もう1つはtext/htmlを使用します(これが主な問題だと思います) . 悪いことに、リクエストを送信する前に content-type ヘッダーを設定しましたが、結果はありません。右側のパネルにまだ application/json が表示されていることに注意してください。私は混乱しています。

    private void SendSelectedFile()
    {
        string url = "http://" + WindowsFormsApplication1.Properties.Settings.Default.HostAddress + "/Service1.svc/rest/PostFileToServer";
        string jsonMsg = "{\"fileContentAsBase64String\":\"" + this.textBox1.Text + "\",\"where\":\"D:\\Temp.dwg\"}";
        byte[] buffer = System.Text.Encoding.UTF8.GetBytes(jsonMsg);

        HttpWebRequest wr = WebRequest.Create(new Uri(url)) as HttpWebRequest;
        wr.Method = "POST";
        wr.ContentType = "application/json; charset=utf-8";
        wr.ContentLength = buffer.Length;
        //wr.TransferEncoding = "UTF-8";
        System.IO.Stream rs = wr.GetRequestStream();
        rs.Write(buffer , 0, buffer.Length);
        rs.Close();

        WebResponse response = wr.GetResponse();
    }

これはサービスのインターフェースです

    [WebInvoke(
        Method = "POST",
        ResponseFormat = WebMessageFormat.Json,
        RequestFormat = WebMessageFormat.Json,
        BodyStyle = WebMessageBodyStyle.Wrapped,
        UriTemplate = "/PostFileToServer"
    )]
    Boolean PostFileToServer(string fileContentAsBase64String, string where);
4

1 に答える 1

2

whereコードをテストし、400 をメンバーに渡される値に絞り込みました。

string jsonMsg = "{\"fileContentAsBase64String\":\"" + this.textBox1.Text + "\",\"where\":\"D:\\Temp.dwg\"}";

値を渡そうとしていると思いますD:\Tempdwgが、バックスラッシュ \T はサーバーによってエスケープシーケンスとして解釈されているようです。その値をbase64でエンコードするか、ダブルエスケープしてみてください\\\\

WCF トレースは、JSON 文字列の逆シリアル化でエラーが発生したことを示しています。

于 2013-02-22T09:11:11.537 に答える