0

私は、PDFファイルをSystem.IO.Streamとして生成して返すWCFプロジェクトに取り組んでいます。説明できない行動に出くわしました。

WCFによって公開されるメソッドの1つは、次のとおりです。

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)

「タイプ「バイトの1次元配列」の値を「System.IO.Stream」に変換できません。」

入力のデータ型が文字列に変更されると、転送モードがストリームバックからバッファリングに戻るように見えます。なぜ何かアイデアはありますか?

編集:WCFは.Net 4.0であり、クライアントは.Net3.5です。

4

1 に答える 1

0

解決策を見つけました。それは私が使用していたシリアル化方法によるものでした。XMLSerializerFormat() を ServiceContract に追加したので、カスタム オブジェクトの 1 つでインデックス付きリストを使用できました。オブジェクトは:

<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 に答える