2015-09-29 3 views
0

У меня есть сценарий, как импорт excel в базу данных через службу WCF с использованием как C#, так и VB. И я использую WCF Basichttpbinding.Ошибка ожидания службы WCF?

Рабочий поток

первенствовать оказывает 500 записей. У меня есть запрос Insert в службе. Я конвертирую записи Excel в набор данных (в C# и VB.Net), тогда я передаю один и тот же набор данных для обслуживания для вставки в базу данных, используя для каждого утверждения (дайте мне знать, если это смущает). После этого я пытаюсь отобразить вставленные записи в gridview, который находится в пользовательском интерфейсе (здесь проблема).

Проблема:

Когда я загрузки листа Excel, I'getting об ошибке, как показано ниже,

Сокет Соединение было прервано. Это может быть вызвано ошибкой обработки вашего сообщения или превышением времени приема удаленным хостом или проблемой сетевого ресурса. Локальный тайм-аут сокета был 00: 09: 59,9989999 ---> System.Net.Sockets.SocketException: Существующее соединение было принудительно закрыто удаленным узлом ....

выше ошибка отображения в клиентском приложении (UI). Но данные (от excel) по-прежнему вставляются в базу данных позади сцены.

Я попытался это:

Я попытался ниже вещи,

  1. Я попытался увеличить посыла тайм-аут (в 00:20:00) в пакете Web конфигурационный файл, а затем Я отразил тот же файл в клиентском приложении, но ничего не происходит, поскольку значения принимают значение по умолчанию. (Я полагаю, из configuration.svcinfo => В serializedValue время отправки равно 00:10:00).
  2. Я попытался увеличить maxreceivedMessageSize, maxBufferSize, maxBufferPoolSize, как указано [здесь]. (http://www.codeproject.com/Questions/633699/Socket-Exception-WCF). Но ничего не случилось.

Примечание: он отлично работает, когда я вставляю одну запись.

И другое препятствие заключается в том, что это происходит в моей машине. Но если я попробую то же самое на машине моего друга, я смогу получить 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

позволяют WCF след, который поможет определить вопрос –

+0

ли клиент должен ждать журнал процесс работает в или вы можете обрабатывать его асинхронно. – 3dd

+0

@ 3dd Да, клиент должен дождаться завершения процесса. – gkrishy

ответ

0

Есть несколько "тайм-аут" параметры в файлах конфигурации WCF. Обычно я устанавливаю их на стороне клиента и сервера в разделе.конфигурационный файл:

<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" /> 
+0

Я использую Basichttpbinding :-(поскольку мое клиентское приложение старое, а не wshttpbinding. Следовательно, использование reliablesession невозможно. – gkrishy

+0

Если вы не можете использовать надежнуюSession - просто удалите эту строку. :) –

+0

Это было бы так же, как я если я удалю эту строку. – gkrishy

Смежные вопросы