gpt4 book ai didi

asp.net - 在 WCF 中实例化一个类

转载 作者:行者123 更新时间:2023-12-04 05:18:25 27 4
gpt4 key购买 nike

我正在编写一个 WCF WebMethod 来上传文件,其中我从网络上获取了片段。 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 方法时,由于某种原因,它仅在接口(interface)用作 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 必须使用三个参数(文件名、长度、文件字节流)调用,即使没有使用此签名的方法。

请问创建这个类的实例时为什么需要接口(interface)?

最佳答案

当您使用“添加服务引用”对话框为您的服务创建代理时,默认情况下,代理创建代码将“解包”消息契约(Contract),就像您拥有的那样。如果您希望消息契约(Contract)按照您在代理服务器端的定义显示,您需要选择“高级”选项卡,并选中“始终生成消息契约(Contract)”选项。这样,您也将在客户端中获得消息契约(Contract)。

关于asp.net - 在 WCF 中实例化一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13950636/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com