【发布时间】:2012-12-19 10:47:44
【问题描述】:
我正在编写一个 WCF WebMethod 来将文件上传到其中,我从网络上获取了 sn-ps。 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 必须使用三个参数(FileName、Length、FileByteStream)调用,即使没有使用此签名的方法。
请问在创建这个类的实例时为什么需要接口?
【问题讨论】:
标签: asp.net vb.net wcf webmethod