0

バイトの配列に変換された Windows Phone に画像を投稿できません。ここに mycode があります。

var client = new WebClient();
client.DownloadStringCompleted += dataSubmitCompleted;
client.DownloadStringAsync(new Uri(
    "here url/Service1.svc/saverecord3" + convertImageToArray(bitmapImage1),
    UriKind.Absolute));

ここで convertImageToArray は、写真をバイト配列に変換するメソッドです

4

1 に答える 1

0

GET リクエストで画像を送信するべきではありませんDownloadStringAsync。@radoslaf が述べたように、代わりにUploadメソッドを使用する必要があります (デフォルトで POST を実行します)。また、バイト配列を送信する場合は、UploadDataAsync(not UploadString) を使用する必要があります。

また、クライアントからバイトを受信するようにサービスをコーディングする必要があります。http://blogs.msdn.com/b/carlosfigueira/archive/2008/04/17/wcf-raw-programming-model-receiving-arbitrary-data.aspxの投稿は、このようなサービスを実装する方法を示しています。

コメント後の更新- なるほど、WP7.5 の WebClient API は非常に限られています。このシナリオでは、HttpWebRequestタイプを使用する方が適切である可能性があります。以下のコードは、これをシナリオで使用する方法を示しています。

    private void Button_Click_1(object sender, RoutedEventArgs e)
    {
        HttpWebRequest req = HttpWebRequest.CreateHttp("http://here.url/service1.svc/saverecord3");
        req.Method = "POST";
        req.Headers[HttpRequestHeader.ContentType] = "application/octet-stream";
        req.BeginGetRequestStream(GetRequestStreamCompleted, req);
    }

    void GetRequestStreamCompleted(IAsyncResult ar)
    {
        byte[] imageBytes = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
        HttpWebRequest req = (HttpWebRequest)ar.AsyncState;
        Stream reqStream = req.EndGetRequestStream(ar);
        reqStream.Write(imageBytes, 0, imageBytes.Length);
        reqStream.Close();
        req.BeginGetResponse(GetResponseCompleted, req);
    }

    void GetResponseCompleted(IAsyncResult ar)
    {
        HttpWebRequest req = (HttpWebRequest)ar.AsyncState;
        HttpWebResponse resp = (HttpWebResponse)req.EndGetResponse(ar);
        this.Dispatcher.BeginInvoke(() =>
        {
            this.txtStatus.Text = "Upload result: " + resp.StatusCode;
        });
    }
于 2013-04-02T16:28:31.613 に答える