2015-04-03 44 views
0

我想從Windows Phone 8.1應用上傳圖像到我的wcf服務。我使用的HttpRequest/HttpResponse對象消息windows phone 8.1 REST WCF服務上傳圖像

客戶機代碼:

private async void RecognizeProduct() 
    { 
     HttpClient httpClient = new HttpClient(); 
     MultipartFormDataContent form = new MultipartFormDataContent(); 


     byte[] arr = originalBitmap.ToByteArray(); 
     var barcodeImageForm = new ByteArrayContent(arr, 0, arr.Count()); 
     barcodeImageForm.Headers.ContentType = new MediaTypeHeaderValue("image/bmp"); 

     form.Add(barcodeImageForm, "image", "barcodeImage.bmp"); 

     HttpResponseMessage response = await httpClient.PostAsync("http://localhost:51746/Service.svc/recognize", form); 

     response.EnsureSuccessStatusCode(); 
     httpClient.Dispose(); 
     string result = response.Content.ReadAsStringAsync().Result; 
    } 

服務接口:

[OperationContract] 
    [WebInvoke(UriTemplate = "/recognize", Method="POST")] 
    string RecognizeBarcode(Stream barcodeImageStream); 

服務方法:

public string RecognizeBarcode(Stream barcodeImageStream) 
    { 
     byte[] buffer = new byte[32768]; 
     MemoryStream ms = new MemoryStream(); 
     barcodeImageStream.CopyTo(ms); 
     Bitmap barcodePhoto = new Bitmap(barcodeImageStream); 
     string barcodeResult = BarcodeEncoder.BarcodeEncode(barcodePhoto); 
     barcodeImageStream.Close(); 
     ms.Close(); 
     return barcodeResult; 
    } 

的Web.config

<bindings> 
    <webHttpBinding> 
    <binding name="" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" 
      transferMode="Streamed" openTimeout="00:25:00" closeTimeout="00:25:00" 
      sendTimeout="00:25:00" receiveTimeout="00:25:00"> 
    </binding> 
    </webHttpBinding> 
</bindings> 
<services> 
    <service behaviorConfiguration="MyServiceBehavior" name="WhereCheaperService.Service"> 
    <endpoint address="" binding="webHttpBinding" behaviorConfiguration="web" contract="WhereCheaperService.IService"> 
     <identity> 
     <dns value="localhost"/> 
     </identity> 
    </endpoint> 
    <endpoint address="max" binding="mexHttpBinding" contract="IMetadataExchange"></endpoint> 
    </service> 
</services> 
<behaviors> 
    <!--BEGIN ADD ENDPOINT BEHAVIOR--> 
    <endpointBehaviors> 
    <behavior name ="web"> 
     <webHttp /> 
    </behavior> 
    </endpointBehaviors> 
    <!--END of ADD ENDPOINT BEHAVIOR--> 
    <serviceBehaviors> 
    <behavior name="MyServiceBehavior"> 
     <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/> 
     <serviceDebug includeExceptionDetailInFaults="false"/> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 
<protocolMapping> 
    <add binding="basicHttpsBinding" scheme="https" /> 
</protocolMapping> 
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /> 

客戶端已成功創辦了服務,但要求不工作。我得到的錯誤:

An exception of type 'System.ArgumentException' occurred in System.Drawing.dll but was not handled in user code 

我該如何解決這個問題?謝謝。

回答

0

由於MSDN寫入位圖構造函數(流)的頁面(https://msdn.microsoft.com/en-us/library/z7ha67kw%28v=vs.110%29.aspx),你會得到一個 'System.ArgumentException' 上,如果:

stream does not contain image data or is null. -or- stream contains a PNG image file with a single dimension greater than 65,535 pixels.

,你應該檢查這些條件!

+0

謝謝你的回答,我解決了這個問題 – 2015-04-04 19:14:01

+0

我很高興能幫上忙! – WPMed 2015-04-05 07:48:58