2012-04-27 2 views
0

Я пишу службу отдыха WCF. Он будет использовать, чтобы получать и сохранять изображение. Я беру и отправлю изображение с помощью телефона Windows 7. Я могу отправить изображение, которое анализирует поток (на стороне обслуживания), но изображение не будет сохранено из-за «badparameter».Не удается отправить снимок в службе отдыха wcf

кода использовать, чтобы сделать снимок:

private void TakePictureAction() 
    { 
     //Show the camera 
     _camera.Show(); 
     //Append when camera task finished. 
     _camera.Completed += delegate(object sender, PhotoResult e) 
           { 
            _photoImage = new BitmapImage(); 
            _photoImage.SetSource(e.ChosenPhoto); 
           }; 
    } 

использования кода для отправки изображения (с острым отдыхом):

var client = new RestClient("http://127.0.0.1:81/Service.svc"); 
var request = new RestRequest("/uploadImage", Method.POST); 
request.AddBody(_photoImage); 
try 
{ 
    client.ExecuteAsync(request, response => 
           { 
            //Do stuff 
           }); 
} 
catch (Exception ex) 
{ 
    MessageBox.Show("error"); 
} 

и код на стороне Serveur:

public void UploadImage(Stream fileStream) 
{ 
    if (fileStream != null) 
    { 
     string filePath = @"c:\"; 
     using (FileStream fileToUpload = new FileStream(filePath + "ok.bmp", FileMode.Create)) 
     { 
      byte[] byteArray = new byte[10000]; 
      int bytesRead = 0; 
      do 
      { 
       bytesRead = fileStream.Read(byteArray, 0, byteArray.Length); 
       if (bytesRead > 0) 
       { 
        fileToUpload.Write(byteArray, 0, bytesRead); 
       } 
      } while (bytesRead > 0); 
      using (MemoryStream ms = new MemoryStream(byteArray)) 
      { 
       Bitmap img = (Bitmap)Image.FromStream(ms); 
       img.Save(@"c:\img.bmp"); 
      } 
     } 
    } 
} 

Мой Сервисный метод

[OperationContract] 
     [WebInvoke(UriTemplate = "/uploadImage", Method = "POST", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json)] 
     void UploadImage(Stream img); 

Где я ошибаюсь?

+0

Возможно, вам нужно добавить еще '\\' в части img.save, а также в путь к файлу? –

+0

thx это было частью проблемы. Но у меня возникла ошибка, когда я пытаюсь открыть изображение. Например, если изображение не в хорошем формате. – David

ответ

0

Проблема возникает из-за моего веб-сервиса. Мне нужно было увеличить размер сообщения (чтобы отправить полное изображение.). Я сделал это, используя this stackoverflow post

1

Мой метод Service определяется следующим образом:

[WebInvoke] 
string PostImage(Stream stream); 

Реализация метода обслуживания, как показано ниже:

public string PostImage(Stream stream) 
     { 
      var ms = new MemoryStream(); 
      stream.CopyTo(ms); 
      var streamBytes = ms.ToArray();    
      FileStream f = new FileStream("C:\\temp\\sample.jpg", FileMode.OpenOrCreate); 
      f.Write(streamBytes, 0, streamBytes.Length); 
      f.Close(); 
      ms.Close(); 
      stream.Close(); 
      return "Recieved the image on server"; 
     } 

Теперь из моего клиента я загрузить изображение, как показано:

Image image = Image.FromFile("C:\\Sample.png"); // NOTE : Replace your photo location from the camera here 
MemoryStream ms = new MemoryStream(); 
image.Save(ms, System.Drawing.Imaging.ImageFormat.Png); 
byte[] imageArray = ms.ToArray(); 
ms.Close(); 

var client = new RestClient();    
client.BaseUrl = "http://localhost/Service/Service1.svc"; 
var request = new RestRequest(method) { DateFormat = DataFormat.Xml.ToString(), Resource = "/PostImage" }; 
request.AddFile("stream", image, "Array.png"); 
var response = client.Execute(request); 
string responseString; 
if (response.StatusCode == HttpStatusCode.OK) 
{ 
    responseString = HttpUtility.HtmlDecode(response.Content); 
} 
+0

Thx, но я не могу связаться со своей службой, если меняю request.AddBody на request.AddFile. – David

+0

В этом случае вы можете изменить request.AddBody на request.AddParameter («поток», _photoImage, ParameterType.RequestBody); и посмотреть, работает ли он. ПРИМЕЧАНИЕ. Предполагая, что _photoImage имеет тип байта [] – Rajesh

+0

Я могу связаться со службой поддержки, но изображение (sample.jpg) невозможно открыть. – David

0

Windows Phone сохраняет фотографии в формате Jpeg, поэтому проблема здесь, скорее всего, из-за того, что вы aving файл с расширением «.bmp» (bitmap) на сервере, таким образом, вы получаете ошибку «плохого формата»!

+0

Я попытался изменить формат bmp, jpg, png .. и он не работает. – David

+0

Что это за сторона на сервере с MemoryStream? –

+0

так же, как предложил Раджеш мне – David

Смежные вопросы