none
Microsoft.Web.Services3 发送附件出现数据丢失的BUG RRS feed

  • 问题

  • 当前项目使用VB.NET 2005 Winform + Microsoft.Web.Services3 开发,发现在某些状况下添付的文件会丢失。
    通过捕捉收到的数据包,可以保证发送,并且接收到的数据是正确的。
    怀疑是在
    Microsoft.Web.Services3中反序列化时出现了错误。
    兄弟们,又遇到这样情况的吗?有没有解决的方法?
    2008年8月23日 8:00

答案

全部回复

  • 你好,这个还是要跟据你实际的程序来看的,一般情况下webservice如果序列化不正确是会出现这种丢失的错误。
    2008年8月25日 4:02
  • 现在的状况是出现了数据丢失!
    :(
    通过【Microsoft.Web.Services3.WebServicesClientProtocol.ResponseSoapContext.Envelope.OuterXml】取得的XML是正确的呀,只是序列化后就错了,而且并不是所有的都错误,这才是让人奇怪的地方:(
    特别声明一下,序列化错误的数据是经过Base64编码过的Byte数组。请问大家有没有遇到过这种问题?怎么解决的呢?
    2008年8月25日 5:30
  • 单独吧接收到的XML中Byte数组那一部分拿出来,用下面的代码测试,也可以正确的取得数据。
    调用Microsoft.Web.Services3 时并没有自己写反序列化的代码。


    Public Class TestByteArrayManager
     
        Public Shared Function LoadXml(ByVal xmlFilePath As String) As commandCallWithAttachmentResponse
     
            Dim returnPrinterDef As commandCallWithAttachmentResponse = Nothing
     
            If Not My.Computer.FileSystem.FileExists(xmlFilePath) Then
     
                Return Nothing
            End If
            Try
                Using reader As New StreamReader(xmlFilePath, System.Text.Encoding.Default)
                    Dim xSer As New XmlSerializer(GetType(commandCallWithAttachmentResponse))
                    returnPrinterDef = CType(xSer.Deserialize(reader), commandCallWithAttachmentResponse)
                    xSer = Nothing
                End Using
            Catch ex As Exception

            End Try

            Return returnPrinterDef
        End Function
    End Class

    <Serializable(), XmlType(AnonymousType:=True)> _
    <XmlRoot("root")> _
    Public Class commandCallWithAttachmentResponse
        ' Properties
        <XmlArrayItem("part", Form:=XmlSchemaForm.Unqualified, DataType:="base64Binary", IsNullable:=False), XmlArray(Form:=XmlSchemaForm.Unqualified)> _
        Public Property attachments() As Byte()()
            Get
                Return Me.attachmentsField
            End Get
            Set(ByVal Value As Byte()())
                Me.attachmentsField = Value
            End Set
        End Property
        ' Fields
        Private attachmentsField As Byte()()
    End Class
    2008年8月25日 6:30
  • 你好,webservice数据丢失还有可能是以下两个方面造成的:
    1.你传输的文件超过了webservice默认的传输文件的大小。
    2.你传输过程当中超时了,导致webservice没有响应。
    当然你也可以参考:
    http://msdn.microsoft.com/en-us/library/aa528822.aspx

    希望上面的信息能有所帮助!
    2008年8月26日 2:39
  • 谢谢回复,但是这两种可能性都不存在呀!
    因为我直接调用ResponseSoapContext.Envelope.Save方法保存了收到的数据,是完整的。
    而且传输的数据量很小,不可能每次都超时。
    2008年8月27日 2:26
  • 你好,那这种数据丢失的问题是经常出现么?
    我觉得你可以检查一下本地的防火墙或者网络端口方面的问题。
    2008年8月29日 6:11
  • 已经查明是Microsoft.Web.Services3的问题,现在日本客户正在与Microsoft沟通
    2008年9月1日 4:38