【问题标题】:WCF issue with String parameter and Stream return字符串参数和流返回的 WCF 问题
【发布时间】:2012-12-05 17:14:37
【问题描述】:

我正在开发一个 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)

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

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

【问题讨论】:

  • 我解决了我的问题。当我的菜鸟状态不妨碍我这样做时,将在 5 小时内发布答案。

标签: .net vb.net wcf .net-4.0


【解决方案1】:

我找到了解决方案。这是由于我使用的序列化方法。我已将 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多