windows phone 8.1 REST WCF服务上传图片
windows phone 8.1 REST WCF Service Upload image
我想从 windows phone 8.1 应用程序将图像上传到我的 wcf 服务。我使用 HttpRequest/HttpResponse 消息
客户代码:
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
我该如何解决这个问题?谢谢。
正如 MSDN 在 Bitmap Constructor(Stream) 页面 (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.
你应该检查这些条件!
我想从 windows phone 8.1 应用程序将图像上传到我的 wcf 服务。我使用 HttpRequest/HttpResponse 消息
客户代码:
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
我该如何解决这个问题?谢谢。
正如 MSDN 在 Bitmap Constructor(Stream) 页面 (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.
你应该检查这些条件!