.net WebClient不支持并发I/O异常
我在别人的代码中工作,我试图尽可能多地理解它,因此我将尽可能提供相关和充分的信息。如果这里没有足够的细节,请询问,我将尝试用它更新我的问题 因此,在程序启动时,将创建一个实例:.net WebClient不支持并发I/O异常,.net,vb.net,web-services,webclient,.net,Vb.net,Web Services,Webclient,我在别人的代码中工作,我试图尽可能多地理解它,因此我将尽可能提供相关和充分的信息。如果这里没有足够的细节,请询问,我将尝试用它更新我的问题 因此,在程序启动时,将创建一个实例: Public Class ServiceProvider Private ReadOnly serviceClient As IServiceClient Public Sub New(Optional adress As String = Nothing) Me.New(New Service
Public Class ServiceProvider
Private ReadOnly serviceClient As IServiceClient
Public Sub New(Optional adress As String = Nothing)
Me.New(New ServiceClient(adress))
End Sub
Public Sub New(serviceClient As IServiceClient)
Me.serviceClient = serviceClient
End Sub
然后事情发生了,我来到这里(在这里调用/发送和接收数据:
Public Function ExecuteSp(spConfig As String) As ExecuteSpResult
Dim result As ExecuteSpResult = serviceClient.PostData(Of ExecuteSpResult)("executesp", spConfig)
End Function
以及生成实例的类中的PostData
函数:
Public Class ServiceClient
Public Function PostData(Of T)(address As String, data As Byte()) As T
SetHeaders("application/octet-stream") 'sets credentials and stuff to the webClient
Try
Dim serviceResult As Byte() = webClient.UploadData(address, data)
Dim result As T = Deserialize(Of T)(serviceResult)
Return result
Catch ex As Exception
Throw ex
End Try
End Function
而WebClient不支持并发I/O异常
发生在WebClient.UploadData(…)
因此,我四处搜索,发现当客户端的单个实例仅用于所有操作时会发生这种情况。因此,我对上面提到的前2个函数做了如下操作:
Public Class ServiceProvider
Private ReadOnly serviceClient As IServiceClient
Private main_address As String = Nothing
Public Sub New(Optional adress As String = Nothing)
Me.New(New ServiceClient(adress))
If main_address Is Nothing Then
main_address = adress
End If
End Sub
Public Function ExecuteSp(spConfig As String) As ExecuteSpResult
Using client As ServiceClient = New ServiceClient(main_address)
Dim result As ExecuteSpResult = serviceClient.PostData(Of ExecuteSpResult)("executesp", spConfig)
Return result
End Using
End Function
假设每次都会使用webClient
的不同实例,对吗?我还是会遇到异常,不知道该怎么办
更新:
这是在ServiceClient
中初始化webClient
的方式:
Private WithEvents webClient As WebClient
Public Sub New()
Me.New(Config.DefaultServiceAddress)
End Sub
Public Sub New(baseAddress As String)
webClient = New WebClient()
webClient.BaseAddress = baseAddress
webClient.Encoding = System.Text.Encoding.UTF8
End Sub
ServiceClient
中的webClient
在何处/如何声明?@Mark,我更新了我的帖子: