Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Azure中将文件从Android上载到WCF_C#_Java_Android_Wcf_Azure - Fatal编程技术网

C# 在Azure中将文件从Android上载到WCF

C# 在Azure中将文件从Android上载到WCF,c#,java,android,wcf,azure,C#,Java,Android,Wcf,Azure,我正试图将一个文件从android上传到azure,这让我抓狂。我认为这是设置中的一些东西,因为我已经确认了在IIS和android中工作的代码。现在我可以访问c#中的方法,但我的流在服务器上是空的。在安卓系统中,我得到一个415错误“类型不匹配”。非常感谢您的帮助 这是我的c#测试客户端: ServiceReference1.PostImage2Request r = new ServiceReference1.PostImage2Request();

我正试图将一个文件从android上传到azure,这让我抓狂。我认为这是设置中的一些东西,因为我已经确认了在IIS和android中工作的代码。现在我可以访问c#中的方法,但我的流在服务器上是空的。在安卓系统中,我得到一个415错误“类型不匹配”。非常感谢您的帮助

这是我的c#测试客户端:

            ServiceReference1.PostImage2Request r = new ServiceReference1.PostImage2Request();
            MemoryStream memStream = new MemoryStream();                 
            using (FileStream fileStream = File.OpenRead("C:\\crap.png"))
            {
                memStream.SetLength(fileStream.Length);
                fileStream.Read(memStream.GetBuffer(), 0, (int)fileStream.Length);
            }
            r.image = memStream;
            ServiceReference1.RestServiceImplClient c = new ServiceReference1.RestServiceImplClient();
            ServiceReference1.PostImage2Response p = c.PostImage2(r);
这是我的客户端配置:

 <system.serviceModel>
<bindings>
  <basicHttpBinding>
    <binding name="BasicHttpBinding_IRestServiceImpl" />
  </basicHttpBinding>
</bindings>
<client>
  <endpoint address="http://testapp.cloudapp.net/Service1.svc"
    binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IRestServiceImpl"
    contract="ServiceReference1.IRestServiceImpl" name="BasicHttpBinding_IRestServiceImpl" />
</client>
这是我的服务器配置:

<system.serviceModel>
<behaviors>
  <serviceBehaviors>
    <behavior name="WCFServiceWebRole2.Service1Behavior">
      <!-- To avoid disclosing metadata information, set the value below to false before deployment -->
      <serviceMetadata httpGetEnabled="true"/>
      <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
      <serviceDebug includeExceptionDetailInFaults="true"/>
    </behavior>
  </serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />

<bindings>
  <basicHttpBinding>
    <binding name="BasicHttpBinding_WCFServiceWebRole2" transferMode="Streamed" maxBufferSize="10485760" maxReceivedMessageSize="67108864">
      <readerQuotas maxDepth="64" maxStringContentLength="214748364" maxArrayLength="214748364"
          maxBytesPerRead="4096" maxNameTableCharCount="16384" />
      <security mode="None">
        <transport clientCredentialType="None" />
      </security>
    </binding>
  </basicHttpBinding>
</bindings>
<services>
  <service name="WCFServiceWebRole2.Service1" behaviorConfiguration="WCFServiceWebRole2.Service1Behavior">        
    <endpoint address="" binding="basicHttpBinding" contract="WCFServiceWebRole2.IRestServiceImpl"/>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
  </service>
</services>


使用多部分格式有什么特殊原因吗?通常这样做是因为您希望在一个请求中发送多个内容。例如,一个文件和一些相关数据,或几个文件,等等。您似乎没有这样做,所以多部分格式只是混淆了问题。除非你有一个很好的理由使用多部分格式,否则我就干脆放弃它。让您的客户端发送原始字节,让服务器代码直接从流中读取,而不使用
MultipartParser


另外,我注意到,一旦你得到了图像数据,你将尝试把它作为UTF8数据读取。我有理由肯定这行不通,而且可能不是

Brian,我理解你的意思,你是对的,我只想通过网络发送一个文件。我将删除这些项目,并让您知道。非常感谢。
    [OperationContract]
    [WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "PostImage2")]
    string PostImage2(Stream image);

     public string PostImage2(Stream image)
    {
        MultipartParser parser = new MultipartParser(image);

        string content = "testing123";
        try
        {

            if (image == null)
                return "Image stream is null";

            // Read the stream into a byte array
            byte[] data = parser.ToByteArray(image);

            // Copy to a string for header parsing
            content = Encoding.UTF8.GetString(data);

            if (content == "")
                content = "There is no content";

            return content + " - dataLength: " + data.Length.ToString();
        }
        catch (Exception ex)
        {
            return "ERROR" + ex.Message + ex.InnerException + ex.StackTrace;
        }


    }
<system.serviceModel>
<behaviors>
  <serviceBehaviors>
    <behavior name="WCFServiceWebRole2.Service1Behavior">
      <!-- To avoid disclosing metadata information, set the value below to false before deployment -->
      <serviceMetadata httpGetEnabled="true"/>
      <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
      <serviceDebug includeExceptionDetailInFaults="true"/>
    </behavior>
  </serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />

<bindings>
  <basicHttpBinding>
    <binding name="BasicHttpBinding_WCFServiceWebRole2" transferMode="Streamed" maxBufferSize="10485760" maxReceivedMessageSize="67108864">
      <readerQuotas maxDepth="64" maxStringContentLength="214748364" maxArrayLength="214748364"
          maxBytesPerRead="4096" maxNameTableCharCount="16384" />
      <security mode="None">
        <transport clientCredentialType="None" />
      </security>
    </binding>
  </basicHttpBinding>
</bindings>
<services>
  <service name="WCFServiceWebRole2.Service1" behaviorConfiguration="WCFServiceWebRole2.Service1Behavior">        
    <endpoint address="" binding="basicHttpBinding" contract="WCFServiceWebRole2.IRestServiceImpl"/>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
  </service>
</services>