ファイルをアップロードするための WCF WebMethod を作成しています。そのファイルのスニペットを Web から取得しました。WCF インターフェイスは次のようになります。
<ServiceContract()>
Public Interface ITransferService
<OperationContract()>
Sub UploadFile(ByVal request As RemoteFileInfo)
End Interface
<MessageContract()>
Public Class RemoteFileInfo
Implements IDisposable
<MessageHeader(MustUnderstand:=True)>
Public FileName As String
<MessageHeader(MustUnderstand:=True)>
Public Length As Long
<MessageBodyMember(Order:=1)>
Public FileByteStream As System.IO.Stream
Public Sub Dispose() Implements IDisposable.Dispose
If FileByteStream IsNot Nothing Then
FileByteStream.Close()
FileByteStream = Nothing
End If
End Sub
End Class
ASP.NET 内では、Web メソッドが消費されると、何らかの理由で、インターフェイスが のインスタンス化の一部として使用されている場合にのみ機能しますRemoteFileInfo
。
Protected Sub btn_Click(sender As Object, e As EventArgs) Handles btn.Click
If fu.HasFile Then
Dim fi As New System.IO.FileInfo(fu.PostedFile.FileName)
' this is the line in question --------------
Dim cu As ServiceReference1.ITransferService = New ServiceReference1.TransferServiceClient()
' -------------------------------------------
Dim uri As New ServiceReference1.RemoteFileInfo()
Using stream As New System.IO.FileStream(fu.PostedFile.FileName, IO.FileMode.Open, IO.FileAccess.Read)
uri.FileName = fu.FileName
uri.Length = fi.Length
uri.FileByteStream = stream
cu.UploadFile(uri)
End Using
End If
End Sub
TransferService
次のアプローチを使用してインスタンスを作成できない理由を誰でもアドバイスできますか:
Dim cu As New ServiceReference1.TransferServiceClient()
上記を試すと、次の行が壊れます。
cu.UploadFile(uri)
...そして UploadFile は、この署名を使用するメソッドがなくても、3 つのパラメーター (FileName、Length、FileByteStream) で呼び出す必要があります。
このクラスのインスタンスを作成するときにインターフェイスが必要なのはなぜですか?