我有一个场景,比如使用C#和VB通过WCF服务将excel导入数据库。我正在使用WCF Basichttpbinding。
工作流程
excel有500条记录。我正在使用插入查询。我将Excel记录转换为数据集(在C#和VB.Net中),然后我将相同的数据集传递给服务,以便为每个语句插入数据库(让我知道它是否混淆)。在此之后,我试图将插入的记录显示到UI中的gridview(这里出现了问题)。
问题是:
当我上传Excel工作表时,我收到如下错误,
套接字连接已中止。这可能是由于处理消息的错误或远程主机超出接收超时或基础网络资源问题引起的。本地套接字超时为00:09:59.9989999 ---> System.Net.Sockets.SocketException:现有连接被远程主机强行关闭....
上述错误显示在客户端应用程序(UI)中。但是数据(来自excel)仍然在场景后面插入数据库。
我尝试的是:
我已尝试过以下内容,
注意:当我插入一条记录时,它工作正常。
另一个障碍是,这发生在我的机器上。但如果我在朋友的机器上尝试同样的事情,我能够毫无错误地获得500条记录。
插入的WCF服务代码:
注意: myds 是保存Excel工作表记录的数据集。
If myds.Tables.Count > 0 Then
If myds.Tables(0).Rows.Count > 0 Then
For Each dr In myds.Tables(0).Rows
InsertNewLog(userid, gno, pnumber)
Next
End If
End If
Private Sub InsertNewLog(userid As String, gno As Int32, pnumber As String)
Dim Oraclecon As New OracleConnection(System.Configuration.ConfigurationManager.AppSettings("ConnectionString"))
Dim transaction As OracleTransaction
Oraclecon.Open()
transaction = Oraclecon.BeginTransaction(IsolationLevel.ReadCommitted)
Dim myCMD As New OracleCommand("insert into Log_table( " & _
" USER_ID, " & _
" GROUP_No, " & _
" PRO_No" ) values (:p_userid,:p_groupno, :p_pronumber)
myCMD.Connection = Oraclecon
Dim p_userid As OracleParameter = New OracleParameter()
p_userid.OracleDbType = OracleDbType.Varchar2
p_userid.Value = userid
myCMD.Parameters.Add(p_userid)
Dim p_groupno As OracleParameter = New OracleParameter()
p_groupno.OracleDbType = OracleDbType.Int32
p_groupno.Value = groupnbr
myCMD.Parameters.Add(p_groupno)
Dim p_pronumber As OracleParameter = New OracleParameter()
p_pronumber.OracleDbType = OracleDbType.Varchar2
p_pronumber.Value = pronumber
myCMD.Parameters.Add(p_pronumber)
Try
myCMD.ExecuteNonQuery()
transaction.Commit()
Catch x
Throw New Exception(x.ToString())
transaction.Rollback()
Exit Sub
Finally
Oraclecon.Close()
Oraclecon.Dispose()
End Try
End Sub
答案 0 :(得分:0)
WCF配置文件中有几个“超时”选项。我通常在.config文件部分的客户端和服务器端设置所有这些:
<binding name="defaultBinding"
closeTimeout="00:01:00"
openTimeout="00:01:00"
receiveTimeout="00:01:00"
sendTimeout="00:01:00">
<reliableSession enabled="true" inactivityTimeout="00:01:00" />
</binding>
如果您不使用reliableSession,则只需删除行
<reliableSession enabled="true" inactivityTimeout="00:01:00" />