CompositeItemWriter - это то, что вам нужно. Он позволяет вам составлять записи делегатов для записи элементов в несколько мест назначения.
Когда ваши авторы-делегаты имеют значение ItemStream
(что, по-видимому, имеет место для вас), вам нужно зарегистрировать их как потоки на шаге, чтобы их методы обратного вызова из интерфейса ItemStream
правильно вызывались в необходимых точках жизненного цикла шага (или вкратце, так что их ItemStream
контракт правильно соблюдается). Вы можете найти более подробную информацию об этом в Регистрация ItemStream с помощью шага справочной документации.
Надеюсь, это поможет.
Проблема, которую Вы описываете, происходит, потому что asp.net снова использует sessionid, если sessionid все еще будет существовать в подлинном cookie при вызове отказа (), то это просто снова использует его, необходимо явно создать новый sessionid afaik что-то как:
HttpCookie mycookie = new HttpCookie("ASP.NET_SessionId");
mycookie.Expires = DateTime.Now.AddDays(-1);
Response.Cookies.Add(mycookie);
Вы называете Сессию. Отказаться на своей специальной странице "Your session expired"? Если так, не делайте.
У меня тоже сработал трюк с добавлением файлов cookie:
Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)
' Code that runs when a new session is started
If Session.IsNewSession Then
'If Not IsNothing(Request.Headers("Cookie")) And Request.Headers("Cookie").IndexOf("ASP.NET_SessionId") >= 0 Then
If Not IsNothing(Request.Headers("Cookie")) AndAlso Request.Headers("Cookie").IndexOf("ASP.NET_SessionId") >= 0 Then
'VB code
Dim MyCookie As HttpCookie = New HttpCookie("ASP.NET_SessionId")
MyCookie.Expires = System.DateTime.Now.AddDays(-1)
Response.Cookies.Add(MyCookie)
'C# code
'HttpCookie mycookie = new HttpCookie("ASP.NET_SessionId");
'mycookie.Expires = DateTime.Now.AddDays(-1);
'Response.Cookies.Add(mycookie);
Response.Redirect("/timeout.aspx")
End If
End If
End Sub