可以使用byte数组来传文件,它在XML中被解析为BASE64格式,但是这种方法通常效率很低.
更好的方法是使用WSE,见http://msdn.microsoft.com/webservices/building/wse/default.aspx,安装后里面有详细的文档告诉你如何进行文件传输.

解决方案 »

  1.   

    wse?  我说的信息传送以及文件传送是p2p的,应该不涉及到跟web service有什么关系吧?
    你说效率低,具体效率如何?我只是想做到象qq那样的及时消息以及偶尔传送文件(而且是在有防火墙,需要用soap的时候才用,一般用tcp)  不知道这样的方式可行否?
      

  2.   

    DIME规范是使用SOAP传送二进制文件,它以附件的形式,文件的大小和内容不受限制,并且可以穿越防火墙。虽然MS在WSE中使用它,但是它并不是Web Service的专有技术。具体的内容你可以访问msdn站点,搜索dime关键字。也可以通过google来搜索。如果你有最新的msdn文档,上面有详细介绍。因为不是一两句话就能说清楚。总的来说DIME可以用来传送各种对象(图片、语音等多媒体,我猜测msn6可能使用了这个规范)。
      

  3.   

    就是说利用soap发送一般的消息有比较好的方法么,或者一般的思路,谢谢。
      

  4.   

    Imports System.IO
    Imports System.Web.Services<WebService(Namespace:="http://lucky_elove.www1.dotnetplayground.com/")> _
    Public Class Upload
      Inherits System.Web.Services.WebService#Region " Web 服务设计器生成的代码 "  Public Sub New()
        MyBase.New()    '该调用是 Web 服务设计器所必需的。
        InitializeComponent()    '在 InitializeComponent() 调用之后添加您自己的初始化代码  End Sub  'Web 服务设计器所必需的
      Private components As System.ComponentModel.IContainer  '注意:以下过程是 Web 服务设计器所必需的
      '可以使用 Web 服务设计器修改此过程。
      '不要使用代码编辑器修改它。
      <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
        components = New System.ComponentModel.Container()
      End Sub  Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        'CODEGEN: 此过程是 Web 服务设计器所必需的
        '不要使用代码编辑器修改它。
        If disposing Then
          If Not (components Is Nothing) Then
            components.Dispose()
          End If
        End If
        MyBase.Dispose(disposing)
      End Sub#End Region  <WebMethod()> Public Function UploadFile(ByVal fs() As Byte, ByVal FlName As String) As String
        Try
          Dim m As New MemoryStream(fs)
          Dim f As New FileStream(Server.MapPath(".") + "\" + FlName, FileMode.Create)
          m.WriteTo(f)
          m.Close()
          f.Close()
          f = Nothing
          m = Nothing
          Return "文件已经上传成功。"    Catch ex As Exception
          Return ex.Message
        End Try
      End FunctionEnd Class
      

  5.   

    Imports System.Web.Services
    Public Class Upload1
      Inherits System.Web.UI.Page
      Protected WithEvents Button1 As System.Web.UI.WebControls.Button#Region " Web 窗体设计器生成的代码 "  '该调用是 Web 窗体设计器所必需的。
      <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()  End Sub  Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
        'CODEGEN: 此方法调用是 Web 窗体设计器所必需的
        '不要使用代码编辑器修改它。
        InitializeComponent()
      End Sub#End Region  Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        '在此处放置初始化页的用户代码
      End Sub
      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Try
          Dim f As System.IO.File
          Dim fs As System.IO.FileStream
          Dim o As New com.dotnetplayground.www1.lucky_elove.Upload()
          'file to upload 
          fs = f.Open("E:\mengxianhui\aspxWeb\Test.Doc", IO.FileMode.Open, IO.FileAccess.Read)
          Dim b(fs.Length - 1) As Byte
          fs.Read(b, 0, fs.Length)
          Response.Write(o.UploadFile(b, "Test.Doc"))
          f = Nothing
          fs.Close()
        Catch ex As Exception
          Response.Write(ex.Message)
        End Try  End SubEnd Class
      

  6.   

    <! CDATA[.................]>
      

  7.   


    Imports System.Web.Services
    Public Class Upload1
      Inherits System.Web.UI.Page
      Protected WithEvents Button1 As System.Web.UI.WebControls.Button#Region " Web 窗体设计器生成的代码 "  '该调用是 Web 窗体设计器所必需的。
      <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()  End Sub  Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
        'CODEGEN: 此方法调用是 Web 窗体设计器所必需的
        '不要使用代码编辑器修改它。
        InitializeComponent()
      End Sub#End Region  Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        '在此处放置初始化页的用户代码
      End Sub
      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Try
          Dim f As System.IO.File
          Dim fs As System.IO.FileStream
          Dim o As New com.dotnetplayground.www1.lucky_elove.Upload()
          'file to upload 
          fs = f.Open("E:\mengxianhui\aspxWeb\Test.Doc", IO.FileMode.Open, IO.FileAccess.Read)
          Dim b(fs.Length - 1) As Byte
          fs.Read(b, 0, fs.Length)
          Response.Write(o.UploadFile(b, "Test.Doc"))
          f = Nothing
          fs.Close()
        Catch ex As Exception
          Response.Write(ex.Message)
        End Try  End SubEnd Class
      

  8.   

    我用TcpClient做的信息通讯,soap就不清楚了。
      

  9.   

    大家看看这个帖,我跟她的问题一样
    http://expert.csdn.net/Expert/topic/2154/2154799.xml?temp=.7233087
      

  10.   

    大家看看这个帖,我跟他的问题不同,但有小许相似!!
    http://expert.csdn.net/Expert/topic/2156/2156978.xml?temp=.6006433