您如何接收使用WCF从Android发送的图像?

时间:2019-01-06 23:07:21

标签: c# android wcf

如果您有一个简单的示例,说明如何使用WCF接收图像并将该图像保存在自定义文件夹中,那么它们将为我节省大量时间并引导我走上正确的轨道。

我已经看到您可以使用 Stream 类型或 byte [] 类型,但是我做不正确。

非常感谢您的宝贵时间。

2 个答案:

答案 0 :(得分:0)

您要消耗来自WCF端点的图像响应吗? 这里的一个例子: https://www.dotnetcurry.com/wcf/723/download-files-using-wcf-rest-endpoints

答案 1 :(得分:0)

我做了一个演示,希望它对您有用。
服务器(WCF服务应用程序)

    [ServiceContract]
    public interface IService1
    {
        [OperationContract]
        [WebInvoke(Method ="POST",RequestFormat =WebMessageFormat.Json,ResponseFormat =WebMessageFormat.Json)]
        Task UploadStream(Stream stream);

    }
    public class Service1 : IService1
    {
        public async Task UploadStream(Stream stream)
        {
            using (stream)
            {
                //save file to local folder
                using (var file=File.Create(@"C:\"+Guid.NewGuid().ToString()+".png"))
                {
                    await stream.CopyToAsync(file);
                }
            }
        }
}

Web.config(WCF配置)

<system.serviceModel>
    <services>
      <service name="WcfService3.Service1">
        <endpoint address="" binding="webHttpBinding" contract="WcfService3.IService1" bindingConfiguration="mybinding" behaviorConfiguration="rest"></endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"></endpoint>
      </service>
    </services>
    <bindings>
      <webHttpBinding>
        <binding name="mybinding" receiveTimeout="00:30:00" sendTimeout="00:30:00" maxReceivedMessageSize="104857600" transferMode="Streamed">
          <security mode="None"></security>
        </binding>
      </webHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>

      <endpointBehaviors>
        <behavior name="rest">
          <webHttp/>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <protocolMapping>
        <add binding="basicHttpsBinding" scheme="https" />
    </protocolMapping>    
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

对于创建流传输模式服务,我们还可以使用BasicHttpBinding创建soap服务。
https://social.msdn.microsoft.com/Forums/vstudio/en-US/02733eae-a871-4655-9a2b-0ca1095b07ea/problems-when-uploading-a-stream-to-wcf?forum=wcf
在客户端,您可以使用第三方库来调用WCF Rest服务,例如ksoap。但是您也可以使用HttpClient库发送http请求。就像下面的代码片段一样(HttpClient是.Net库,不是Java库,但是用法类似)。

class Program
{
    static void Main(string[] args)
    {
        HttpClient client = new HttpClient();
        HttpContent content = new StreamContent(File.OpenRead(@"2.png"));
        Task.WaitAll(client.PostAsync("http://10.157.18.36:8800/service1.svc/UploadStream", content));
        Console.WriteLine("OK");
    }
}

请随时告诉我是否有什么可以帮忙的。