0

我正在开发一个 WCF 项目,该项目生成并返回一个作为 System.IO.Stream 的 pdf 文件。我遇到了一种我无法解释的行为。

WCF 公开的方法之一如下:

Public Function Print(ByVal input As Integer) As Stream
    'Do stuff here.
    Return pdfStream
End Function

客户端调用该方法:

Dim streamReturn as Stream
streamReturn = Service.Print(input)

这很好用。当我尝试将输入的数据类型更改为 String 时出现了问题。

Public Function Print(ByVal input As String) As Stream
    'Do stuff here.
    Return pdfStream
End Function

当我在客户端更新服务参考时,现在列出了一个错误:

streamReturn = Service.Print(input)

“‘一维字节数组’类型的值无法转换为‘System.IO.Stream’。”

似乎当我的输入的数据类型更改为字符串时,传输模式从流式返回到缓冲。任何想法为什么?

编辑:WCF 在 .Net 4.0 中,客户端是 .Net 3.5

4

1 回答 1

0

我找到了解决方案。这是由于我使用的序列化方法。我已将 XMLSerializerFormat() 添加到我的 ServiceContract 中,因此我可以在我的一个自定义对象中使用索引列表。对象是:

<DataContract()>
Class MyClass
    <DataMember()>
    Property MyList() As List(Of Object)
    <DataMember()>
    Property MyList(i As Integer) As Object
End Class

一旦我删除了 XMLSerializerFormat() 标记(恢复为 DataContractFormat),我必须从索引属性中删除 DataMember() 标记,然后才能有一个 String 参数和 Stream 返回。

<DataContract()>
Class MyClass
    <DataMember()>
    Property MyList() As List(Of Object)
    '<DataMember()>
    Property MyList(i As Integer) As Object
End Class
于 2012-12-07T15:49:15.413 回答