我最近在做一个基于WCF的网络文件系统,在使用WCF上传下载文件有下面的一些问题:
访问采用wsHttpBinding绑定,可是不支持流,于是单独定义了一个basicHttpBinding的终结点,参考MSDN中流的例程,可以上传文件,包括2G以上的文件都可以,可是basicHttpBinding不支持会话,而且流模式的接口中只能有一个流参数,服务器如何知道客户端的文件相关信息,如文件名等内容信息?
于是我将流传输文件的方式改成了netTcpBinding绑定,因为netTcpBinding支持会话,可运行时出错,一查,原因在于在WCF中流和会话不可同时支持,netTcpBinding采用流和Buffered模式倒是可以。
如何使用WCF来进行文件上传下载呢?

解决方案 »

  1.   

    楼主,可以在WCF中自定义一个包含文件信息的Header来实现你的需求。你在Google里面搜索一下"WCF Header“关键字,很多介绍的
      

  2.   

    netTcpBinding肯定不会出错,我自己写过的。另外所谓的是否支持会话和获取文件信息有何关系?当一个文件要上传时,请求对应的函数参数中给一个文件名即可,非常简单的事。
      

  3.   

    可以采用认证,
    客户端设置用户名密码,服务端进行认证,
    如果想要具体的代码,可以发email给我,
      

  4.   

    也顺便给我发一份吧,谢谢了
    [email protected]
      

  5.   

    传文件建议用 stream
    服务端配置
    <bindings>
    <netTcpBinding>
            <binding name="customTcpBinding"   transferMode="Streamed"   maxReceivedMessageSize="904800000" receiveTimeout="01:30:00" >
              <!--缺省 -->
              <security mode="TransportWithMessageCredential">
                <message clientCredentialType="UserName"/>
              </security>
            </binding>
    </netTcpBinding>
    </bindings>    
        <behaviors>
          <serviceBehaviors>
        <behavior name="FileServer.ServicesBehavior">
         <serviceMetadata httpsGetEnabled="false" />
          <serviceDebug includeExceptionDetailInFaults="false" />
          <serviceCredentials>
            <issuedTokenAuthentication allowUntrustedRsaIssuers="true"></issuedTokenAuthentication>
            <clientCertificate>
              <authentication certificateValidationMode="None"/>
            </clientCertificate>
            <serviceCertificate findValue="MyServer" storeLocation="CurrentUser" x509FindType="FindBySubjectName" storeName="My"/>
            <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="FileServer.MyCustomValidator,FileServer"/>
          </serviceCredentials>
        </behavior>服务端需要X509证书,具体看这
    http://www.cnblogs.com/z2002m/archive/2008/09/17/1292253.html
      

  6.   

    断点续传?需要啊,大哥,给我传一份。太感谢了。
    [email protected]
      

  7.   

    首先非常抱歉,帖子发完后没有及时看。不过当时发完贴后这个问题我通过查资料解决了,采用的是三楼minyskirt说明的方法,就是定义一个“消息契约”,消息契约的头信息中说明文件信息,如文件名,这样服务接收到的时候就知道是什么文件了。
    我记得当时查资料时看到WCF中,在流作为参数时,只能有一个参数,而且如果直接定义,编译时也会出错。
    目前正忙着使用自己制作的一个网络文件系统开发项目,后面有时间后将代码整理一下再共享。
    我还没有考虑断点续传的功能,在局域网中应用时一般可以不考虑,在互联网上传时,一般文件比较小,但如果文件超过1MB,就比较需要了。
      

  8.   

    我在做WCF服务开发时,客户端如果要访问服务器,需要对服务器进行验证,好像客户端的应用程序配置文件中有服务器的公钥信息,如果客户端没有安装服务器的证书,则无法验证通过。哪怕仅将包含服务器证书的公钥导入到客户端中也可以。公钥证书的导入可以在安装程序中做,也可以在用户访问网站的时候导入,大家是否有现成的代码可以共享?
      

  9.   

    麻烦给份代码 [email protected]