C# WCF服务将大文件上载到ftp服务器

C# WCF服务将大文件上载到ftp服务器,c#,wcf,windows-phone-8,web-config,ftpwebrequest,C#,Wcf,Windows Phone 8,Web Config,Ftpwebrequest,我正在开发一个windows phone应用程序,将图像zip文件上载到ftp服务器。但是我不能上传。它给出了一个错误未找到远程服务器 这是我的WCF应用程序web.config <?xml version="1.0"?> <configuration> <appSettings> <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" /> <

我正在开发一个windows phone应用程序,将图像zip文件上载到ftp服务器。但是我不能上传。它给出了一个错误未找到远程服务器

这是我的WCF应用程序web.config

<?xml version="1.0"?>
<configuration>

 <appSettings>
       <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" maxRequestLength="409600" />   
</system.web>
<system.serviceModel>
<bindings>
  <basicHttpBinding>
    <!--<binding maxReceivedMessageSize="2147483647" maxBufferPoolSize="2147483647" receiveTimeout="00:10:00" closeTimeout="00:10:00">
      <security mode="None" />
    </binding>-->
    <binding closeTimeout="01:30:00" 
      openTimeout="01:30:00" receiveTimeout="01:30:00" sendTimeout="01:30:00" 
      maxBufferSize="2147483646" maxBufferPoolSize="2147483646" maxReceivedMessageSize="2147483646">
      <readerQuotas maxDepth="2147483646" maxStringContentLength="2147483646" maxArrayLength="2147483646"
        maxBytesPerRead="2147483646" maxNameTableCharCount="2147483646" /> 
      <security mode="None">             
      </security>
    </binding>    
  </basicHttpBinding>    
</bindings>   

<behaviors>
  <serviceBehaviors>
    <behavior>
      <!-- To avoid disclosing metadata information, set the values below to false before deployment -->
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="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>
 <protocolMapping>
    <add binding="basicHttpsBinding"  scheme="https"/>
 </protocolMapping>    
 <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
 </system.serviceModel>
 <system.webServer>
  <modules runAllManagedModulesForAllRequests="true"/>
  <!--
    To browse web app root directory during debugging, set the value below to true.
    Set to false before deployment to avoid disclosing web app folder information.
  -->
 <directoryBrowse enabled="true"/>
</system.webServer>
<configuration>
<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="BasicHttpBinding_IService1" maxBufferSize="2147483647" closeTimeout="01:10:00"
                    openTimeout="01:10:00" receiveTimeout="01:10:00" sendTimeout="01:10:00" maxReceivedMessageSize="2147483647">
                <security mode="None" />
            </binding>
        </basicHttpBinding>
    </bindings>
    <client>
        <endpoint address="http://xxx.xx.x.xxx/WebService/Service1.svc"
            binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IService1"
            contract="MyService.IService1" name="BasicHttpBinding_IService1" />
    </client>
</system.serviceModel>

这是我的servicerences.ClientConfig

<?xml version="1.0"?>
<configuration>

 <appSettings>
       <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" maxRequestLength="409600" />   
</system.web>
<system.serviceModel>
<bindings>
  <basicHttpBinding>
    <!--<binding maxReceivedMessageSize="2147483647" maxBufferPoolSize="2147483647" receiveTimeout="00:10:00" closeTimeout="00:10:00">
      <security mode="None" />
    </binding>-->
    <binding closeTimeout="01:30:00" 
      openTimeout="01:30:00" receiveTimeout="01:30:00" sendTimeout="01:30:00" 
      maxBufferSize="2147483646" maxBufferPoolSize="2147483646" maxReceivedMessageSize="2147483646">
      <readerQuotas maxDepth="2147483646" maxStringContentLength="2147483646" maxArrayLength="2147483646"
        maxBytesPerRead="2147483646" maxNameTableCharCount="2147483646" /> 
      <security mode="None">             
      </security>
    </binding>    
  </basicHttpBinding>    
</bindings>   

<behaviors>
  <serviceBehaviors>
    <behavior>
      <!-- To avoid disclosing metadata information, set the values below to false before deployment -->
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="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>
 <protocolMapping>
    <add binding="basicHttpsBinding"  scheme="https"/>
 </protocolMapping>    
 <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
 </system.serviceModel>
 <system.webServer>
  <modules runAllManagedModulesForAllRequests="true"/>
  <!--
    To browse web app root directory during debugging, set the value below to true.
    Set to false before deployment to avoid disclosing web app folder information.
  -->
 <directoryBrowse enabled="true"/>
</system.webServer>
<configuration>
<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="BasicHttpBinding_IService1" maxBufferSize="2147483647" closeTimeout="01:10:00"
                    openTimeout="01:10:00" receiveTimeout="01:10:00" sendTimeout="01:10:00" maxReceivedMessageSize="2147483647">
                <security mode="None" />
            </binding>
        </basicHttpBinding>
    </bindings>
    <client>
        <endpoint address="http://xxx.xx.x.xxx/WebService/Service1.svc"
            binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IService1"
            contract="MyService.IService1" name="BasicHttpBinding_IService1" />
    </client>
</system.serviceModel>


我创建了两个项目一个是windows phone应用程序,第二个是wcf应用程序。我正在将大的字节[]数组发送到wcf服务器,这会导致一个错误未找到远程服务器。当
字节[]大小
很小时,它可以正常工作,但当大小较大时,它会失败。我听说我们可以将非常大的文件发送到大约4gb的wcf服务。那我错在哪里呢?在web.config中是否有任何更改?我已在本地计算机上将我的wcf服务托管到IIS。

要通过wcf发送大数据,您有两个选项:

  • 您可以手动将数据分成若干部分(例如,从文件中读取2Kb),然后分别传输每一部分。在服务器端,您可以将每个片段保存在临时文件中。此方法需要一些编码(例如部分的控制顺序)

  • 另一个选项是使用transferMode=“Streamed”,但此模式有一些限制

  • 更新

    如果由于某些原因无法使用流模式,您可以在服务中创建一些方法:

    string BeginSendFile();
    
    此方法必须重新生成id(例如Guid)并将其返回给客户端。此外,服务还可以在临时存储器中创建具有此名称的文件

    void SendFilePortion(string id, byte[] data);
    
    调用此方法并传输少量数据。服务器可以按id查找临时文件并向其写入数据

    void EndSentFile(string id, string originalName);
    

    在传输所有数据时调用此方法以重命名临时文件并将其替换到非临时存储中。

    我已创建了所有图像的zip文件,然后计算该zip文件的
    字节[]
    ,并将该
    字节[]
    发送到wcf服务。我尝试过
    transferMode=“Streamed”
    但没有尝试过工作我使用过transferMode
    Streamed
    。根据你的建议,我已经更改了代码。好的,很高兴能帮助你。也许会在流媒体方面有所帮助。