Business Logic Handler Not Loading
Nov 7, 2006
I'm trying to implement a custom conflict resolver by inheriting from
Microsoft.SqlServer.Replication.BusinessLogicSupport.BusinessLogicModule. The replication is between a SQL Server 2005 Express subscriber and a SQL Server 2005 publisher/distributer.
The problem is that the resolver class in the DLL will not load; although, it does appear to find the DLL. (If I rename the DLL I get a "file not found error"). The exact error message is:
Microsoft.SqlServer.Replication.ComErrorException
"Error loading custom class "MergeConflictHandler" from custom assembly "MergeConflictHandler",
Error : "Could not load type 'MergeConflictHandler' from assembly 'MergeConflictHandler, Version=1.0.2502.22393, Culture=neutral, PublicKeyToken=0403e50cc4dc27fa'."."}
I placed the DLL in the directory of the program that calls SynchronizationAgent.Synchronize and tried it with and without being registered in the GAC. There was no change. Interestingly, when I move the file out of that location, but register it in the GAC, the file is not found. Thinking it may be a security problem, I gave Everyone Read & Execute and Read privileges. I believe the class is actually instantiated by replmerge.exe, an apparantly unmanaged app, so I tried marking it ComVisible. No Luck.
I registered the resolver with the following T-SQL code:
sp_registercustomresolver @article_resolver = 'eClinical Notes Conflict Resolver'
, @is_dotnet_assembly = 'true'
, @dotnet_assembly_name = 'MergeConflictHandler'
, @dotnet_class_name = 'MergeConflictHandler'
, @resolver_clsid = Null
The resolver I've created is not much more than a shell at this point. It is pasted below, but I tried using the code found on MSDN character-for-character and had the same problem.
using System;
using System.Text;
using System.Data;
using System.Data.Common;
using Microsoft.SqlServer.Replication.BusinessLogicSupport;
namespace MergeConflictHandler
{
public class MergeConflictHandler :
Microsoft.SqlServer.Replication.BusinessLogicSupport.BusinessLogicModule
{
// Variables to hold server names.
private string m_PublisherName;
private string m_SubscriberName;
private string m_Artical_Name;
public MergeConflictHandler()
{
}
// Implement the Initialize method to get publication
// and subscription information.
public override void Initialize(string publisher, string subscriber, string distributor, string publisherDB, string subscriberDB,string articleName)
{
m_PublisherName = publisher;
m_SubscriberName = subscriber;
m_Artical_Name = articleName;
}
// Declare what types of row changes, conflicts, or errors to handle.
public override ChangeStates HandledChangeStates
{
get
{
return ChangeStates.UpdateConflicts;
}
}
public override ActionOnUpdateConflict UpdateConflictsHandler(DataSet publisherDataSet, DataSet subscriberDataSet, ref DataSet customDataSet, ref ConflictLogType conflictLogType, ref string customConflictMessage, ref int historyLogLevel, ref string historyLogMessage)
{
if (m_Artical_Name == "PatientAllergies")
{
// Accept the updated data in the Subscriber's data set and apply it to the Publisher.
}
return ActionOnUpdateConflict.AcceptPublisherData;
}
}
}
Does anyone have any thoughts or advice? (Help!)
View 4 Replies
ADVERTISEMENT
Jul 10, 2006
hi,
i'm following steps described at: http://msdn2.microsoft.com/en-us/library/ms365150.aspx
all goes fine until step 6. of paragraph "To debug a business logic handler on a Web server using Web synchronization, or for a SQL Server Mobile Subscriber".
in my case when attaching to w3wp.exe i can only debug t-sql or native code. when i forcibly check 'managed' i get: "Unable to attach to the process. Access is denied". error picture:
http://img156.imageshack.us/my.php?image=debuggingerror7bp.jpg
i KNOW that the business logic handler gets loaded and executed because i am logging some info in it. i would be grateful for any suggestions.
TIA, kamil nowicki
View 3 Replies
View Related
Oct 25, 2007
Hi,
I am performing the Merge Replication of Timesheet table between SQL server 2005 and SQL CE on the Pocket PC. For one of the article, I would like to perform web synch for only those rows which have certain field set to true.
I am trying to use Business Logic Handler to implement this logic. I am using following code out of sample on MSDN web site. However I am not sure if this code gets executed for each row for a table during synch or does this get executed once for each table? The answer would help me write logic on applying synch changes only for few rows.
Thanks
public override ActionOnDataChange UpdateHandler(SourceIdentifier updateSource,
DataSet updatedDataSet, ref DataSet customDataSet, ref int historyLogLevel,
ref string historyLogMessage)
{
if (updateSource == SourceIdentifier.SourceIsPublisher)
{
//check the approved status of the timesheet
if (updatedDataSet.Tables["tbl_timesheets"].Rows[0]["ts_approved"] == true)
{
// Set the reference parameter to write the line to the log file.
historyLogMessage = updatedDataSet.Tables["tbl_timesheets"].Rows[0]["ts_id"].ToString();
// Set the history log level to the default verbose level.
historyLogLevel = 1;
// Accept the updated data in the Subscriber's data set and apply it to the Publisher.
return ActionOnDataChange.AcceptData;
}
else
{
return ActionOnDataChange.RejectData;
}
}
else
{
return base.UpdateHandler(updateSource, updatedDataSet,
ref customDataSet, ref historyLogLevel, ref historyLogMessage);
}
}
Any Help is appreciated.
Thanks
View 1 Replies
View Related
May 17, 2007
When running a business logic handler at the subscriber, you can override SubscriberInserts, SubscriberUpdates and SubscriberDeletes. Are these methods called when data is changed coming from the server to client, from the client to the server, or in both directions?
Thanks,
Bryan
View 1 Replies
View Related
Oct 25, 2007
Hi,
I have 2 related tables in SQL 2005. I am using Business Logic Handler on one of those tables during Merge Replication to reject data for few rows during web synchronization. Once a row is rejected, I would like to run the Business Logic Handler for the related table to reject changes for the row with same foreign key as the rejected row in first table.
Not sure if I need to create separate Business Logic Handlers for each table or can it be achieved in a single Handler.
Also is it possible to get a list of rejected rows back from the handler?
Thanks for help.
View 1 Replies
View Related
Mar 1, 2007
I am currenly have a simple merge replication topology. The publisher-distibutor is SQL Server 2005 and the subscriber is a SQL Server Express. The type of subscription is non anonymous pull.
I made a custom business logic handler class that is trying the following:
When a new record is inserted in a published table on the pubsliher, some additional records are added in a differenct table in subscriber. Then the "InsertHandler" method returns "AcceptData" in order to allow the agent to add the new record in current table also.
So I am establishing a new connection to the subscriber and I am trying to add the additional recs in the different table. The problem is that this different table is also published as read-only on the subscriber. So my insert fails saying that table is not updatable.
Is there any way to bypass this problem?
In fact I realised in general that when my custom logic handler performs some DML operations on the subscriber, these are NOT considered as part of the replication e.g. the NOT FOR REPLICATION constraints and triggers are active for these operations.
Is this normal?
View 1 Replies
View Related
Nov 17, 2006
I have got a business logic update conflict handler working, but I have had to work round what appears to be a bug.
Please can someone confirm if this is indeed a bug €“ and if it is a known bug?
My conflict handler needs to take some columns from the publisher row and some from the subscriber row in the event of conflict.
I can quite happily generate a custom dataset which contains the winning row that I want €“ I can see that because I can step through the conflict handler with debug when a conflict occurs.
However, just returning ActionOnUpdateConflict.AcceptCustomConflictData from the UpdateConflictsHandler method does not set the publisher and subscriber columns correctly. I end up with different values on the two databases.
I have found that the only way to get the correct rows on both publisher and subscriber is to create a new ADO connection to the publisher and actually perform an update €“ updating all the modified columns. This now works reliably in my testing.
Fortunately, due to business rules the frequency of update conflicts are likely to be very infrequent, but I would very much like to avoid having to do the €˜unnecessary€™ update.
Notes:
I am using column level tracking €“ but I have seen the problem with row level tracking too
I have mainly been using SP1 but have repeated the test on a configuration using the SP2 CTP €“ and the problem occurs there too
The problem is not due to complex logic in my code. If the method just sets customDataSet = publisherDataSet.Copy and then returns ActionOnUpdateConflict.AcceptCustomConflictData, the changed and winning publisher values are not sent to the subscriber
Any thoughts would be much appreciated
View 5 Replies
View Related
Jul 23, 2007
Pocket PC 2003, SQL Compact Edition, SQL2005, IIS6.0
I implemented a business logic handler to deal with conflicts. When I deploy it on the SQL server which is also the web replication server, the logic handler seems working fine. However, if I deploy this handler to another web server. The logic handler failed to be loaded.
My enviroment settings are desribed as below.
Machine A, distributor, with database and publication. The business logic handler is deployed at C:Program FilesMicrosoft SQL Server90COMBusinessLogicHandler.dll. It's registered by using sp_registercustomresolver. The @assembly is specified as @assembly=C:Program FilesMicrosoft SQL Server90COMBusinessLogicHandler.dll';
Machine B, IIS server. The same business logic handler is deployed at C:Program FilesMicrosoft SQL Server90COMBusinessLogicHandler.dll on the Machine B itself.
When I ran the web replication, the Merge Agent reported the error as below.
Error loading custom assembly "C:Program FilesMicrosoft SQL Server90COMBusinessLogicHandler.dll", Error: "Could not load file or assembly 'C:\Program Files\Microsoft SQL Server\90\COM\BusinessLogicHandler.dll' or one of its dependencies. The given assembly name or codebase was invalid.
It seemed that the Merge Agent had trouble to find my logic handler because the path reported in the error log has two backward slashes. I have no idea where did that came from. I am not sure if that's the cause of the error. Without business logic handler. I had successfully finished web replication of Machine B to sync with Machine A. If I setup web replication directly on Machine A with business logic handler, I can successfully sync as well.
Does anyone has any idea about how to correctly deploy business logic handler on a web server?
Thanks,
Nigel
View 1 Replies
View Related
Feb 26, 2008
Or maybe it can't find something it's looking for to make my additional symetrical with everything else. This is from one of my businesslogic files. What causes Visual Studio to not allow me to add something here and have it behave like the other parameters/ I'm talking about ShortDesc. Visual studio inserted () and the Get instead of GET like all the others. It would not allow me to capitalize the "get". There has to be a reason for this. Currently my program is adding all of the fields except the ShortDesc to the table in my database. Does anyone have any thoughts as to why this is the case?
#Region "Pvt Members" Private _ArticleID As System.Int32 Private _UserID As System.Int32 Private _WebSiteID As System.Int32 Private _ArticleTitle As System.String Private _Author As System.String Private _ShortDesc As System.String Private _ArticleText As System.String Private _AnchorText As System.String Private _ShowInDirectory As System.Boolean Private _Active As System.Boolean Private _DateAdded As System.DateTime#End Region#Region "Properties" Public Property ArticleID As System.Int32 GET Return _ArticleID End Get Set(ByVal Value As System.Int32) _ArticleID= Value End Set End Property Public Property UserID As System.Int32 GET Return _UserID End Get Set(ByVal Value As System.Int32) _UserID= Value End Set End Property Public Property WebSiteID As System.Int32 GET Return _WebSiteID End Get Set(ByVal Value As System.Int32) _WebSiteID= Value End Set End Property Public Property ArticleTitle As System.String GET Return _ArticleTitle End Get Set(ByVal Value As System.String) _ArticleTitle= Value End Set End Property Public Property Author As System.String GET Return _Author End Get Set(ByVal Value As System.String) _Author= Value End Set End Property Public Property ShortDesc() As System.String Get Return _ShortDesc End Get Set(ByVal value As System.String) End Set End Property Public Property ArticleText As System.String GET Return _ArticleText End Get Set(ByVal Value As System.String) _ArticleText= Value End Set End Property Public Property AnchorText As System.String GET Return _AnchorText End Get Set(ByVal Value As System.String) _AnchorText= Value End Set End Property Public Property ShowInDirectory As System.Boolean GET Return _ShowInDirectory End Get Set(ByVal Value As System.Boolean) _ShowInDirectory= Value End Set End Property Public Property Active As System.Boolean GET Return _Active End Get Set(ByVal Value As System.Boolean) _Active= Value End Set End Property Public Property DateAdded As System.DateTime GET Return _DateAdded End Get Set(ByVal Value As System.DateTime) _DateAdded= Value End Set End Property #End Region
View 1 Replies
View Related
Apr 5, 2006
Hey guys,I have to import a csv file to my database and then add
some values to other fields based on these values. At present I use a
store procedure that does a bulk insert and then I use an update and
fetch inside the sql to perform these updates. I am not sure if this is
the best way. Is this bad, since some amount of busniess logic is in
the store procedure?If it is, how can I do this better?Thanks for the answer.
View 1 Replies
View Related
May 21, 2008
I am working with stored procedures to provide conditional business logic for a customer based on triggers. Is it possible for a stored procedure to execute an external program ie opening or distributing a crystal report?
View 9 Replies
View Related
Mar 16, 2007
I guess I just don't get the reasoning behind the new SqlDataSource control. Haven't we just spent the last decade or so evangelizing and learning how and why to separate business logic from the display in VB 6 and VS.NET? In this age of programming for disparate devices (desktop, mobile, PocketPC, etc.) when this separation makes more sense than ever, why is MS pushing us to go back to putting our logic and data access rules and objects back in the display? It doesn't make sense. Why would anyone do this? And why would all the experts and MVPs at ASP.NET, DevX, 4GuysFromRolla, etc., go along with this?
View 4 Replies
View Related
May 27, 2015
ALTER TABLE [dbo].[bkrm_lendcoll] ADD CONSTRAINT
   ReqdCovgAmt_constraint33 CHECK   Â
( caseÂ
 when CovgAmt = 0 and  ReqdCovgAmt = 0 then 1
 when CovgAmt = 0 and  ReqdCovgAmt = 1 then 1
 when CovgAmt = 1 and  ReqdCovgAmt = 0 then 1
 when CovgAmt = 1 and  ReqdCovgAmt = 1 then 0
end =1
)
This is my first attempt to add a constraint for business logic. Â The desired behavior is that the two columns together have the same behavior as a radio button. Â (one can be true, the other true, both can be false, but both cannot be true.) I get this error when I attempt to update it.
The ALTER TABLE statement conflicted with the CHECK constraint "ReqdCovgAmt_constraint33". The conflict occurred in database "Std", table "dbo.lendcoll".
So, basically my question is, when you have two bit columns and want them to have the truth table such as described, how can I set a Check constraint to enforce this?
View 14 Replies
View Related
Oct 30, 2006
I have a merge replication topology that allows some subscribers (clients) to retreive a number for certain columns (ie invoice number, order number, etc).
I have implemented a custom business logic handler to check for inserts from the subscriber and before updating the server, I call a stored proc on the server to generate a new number. I update the data set and call ActionOnDataChange.AcceptCustomData. This works great for the publication db but I am trying to get this new number back into the subscription db. I am using web synchronization so I really don't have a connection back to the subscriber database.
Any Ideas? I was thinking about keeping track of the updates myself and build a sql string and somehow get that back to the subscriber to run updates for those columns... I am wondering if I am pushing the limits of the business logic handler? Was it designed to do this? Of course the easy answer is to modify my client application but I am trying to avoid that at this point.
Any help/suggestions would be greatly appreciated!
View 6 Replies
View Related
Jul 20, 2005
Hello,I stuck in a delimma.Where to put the business logic that involves only one updatebut N number of selects from N tables........with N where conditions
View 5 Replies
View Related
Jul 20, 2005
What is the way we could implement a business logic from a Table bystoring it statemnnets in a colums and defining an execute sql toexecute it.Some legal requirements make it diffcult for us to createmodify stored procdures so Iwant to have a process where we create newrows in a table and execute it to execute business logic.All views are welcome.Havin g one table two tables different approaches to store ststementsand execute them....Case logic how to implement it?Flags in the tble colums in the tablesetcThanksAjay Garg
View 1 Replies
View Related
Apr 21, 2015
I am currently working with C and SQL Server 2012. My requirement is to Bulk fetch the records and Insert/Update the same in the other table with some business logic? How do i do this?
View 14 Replies
View Related
Oct 23, 2007
Does anyone have a successful prescribed sequence for installing VS2005 and Business Intelligence Reports Projects on a Vista Business workstation to be used to create reports for a server?
I've looked through everything I can find here and I don't seem to see a clear solution without a lot of trial and error.
Fact is, I've not been successful getting just the reports to install on a plain XP box. Of course, the report creation looks fine on the server but I don't want to work directly on the server.
Thank you
View 1 Replies
View Related
Jun 10, 2006
Can anyone take me through synchronization of contacts within Business Contacts Outlook into Microsoft Small Business Accounts?
I run a stand alone PC with NO network. When SBA came SQL was also installed. Apparently you can synchronise Contacts within Business Contacts with SBA but both SBA & Outlook should work through the same SQL server.
Has anyone tried this?
Can someone walk me through the process?
Thanks
Debbie
View 1 Replies
View Related
Apr 24, 2008
how will i start with a food handler data model?
thanks
View 2 Replies
View Related
Feb 7, 2007
Hi, I am trying to Log my activities when OnError event handler fires
I have defined few tasks in OnError event handler section so when there is a failer on the main package my OnError task runs ( which it work fine)
now I am trying to add Dts.LOG from inside OnError evend handler task, and it seems like SSIS doens't give that function.
I can use dts.log outside on the main package but not inside OnError section! any ideas
Thanks
View 5 Replies
View Related
Feb 18, 2008
2 questions:
1) if I place an Execute SQL Task in OnError event of the Error Handler at the Package level, will it catch all of my possible task errors? There's no need to add an Event Handler for each task in the Control flow?
2) A stupid one...I'd like to test my Event Handler (writing to custom log table in case there's an error in the Integration Service)...any ideas how to provoke an SSIS error to check my Error Handler ?
Thanx!
View 4 Replies
View Related
Apr 8, 2008
HI, I'm implementing a custom error loggin using SSIS event handler, I succesfully catch the error and now I trying to retreave the value of this variables: System::ErrorCode and System::ErrorDescription.
The problem is that only the System::ErrorDescription retreave a value, the variable System::ErrorCode cames empty.
Is that correct?
Thanks.
View 1 Replies
View Related
Aug 8, 2000
What is "SIGNAL HANDLER" (SPID 1)?
And what is SPIDs 1-6 ?
Exec Sp_who:
SPID Status DBName Command
----- ------------------------------ ------ ----------------
1 sleeping master SIGNAL HANDLER
2 BACKGROUND master LOCK MONITOR
3 BACKGROUND master LAZY WRITER
4 sleeping master LOG WRITER
5 sleeping master CHECKPOINT SLEEP
6 BACKGROUND master AWAITING COMMAND
View 1 Replies
View Related
Oct 19, 2006
Is the Onerror Event Handler from the tabbed window in the IDE the same as the red arrow paths that can be used in the control flows and Data Flows?
If yes, what and where is the best practice to use?
If not, can you elaborate?
Thanks,
View 4 Replies
View Related
Apr 28, 2006
I'm trying to log the information spit out by SSIS but only the rowcount part, e.g. "component xyz wrote 1000 rows", im currently using a execute sql task but that will log all information, any simple efficient way i can filter out that rows written line and log that into a sql server table?
thanks
View 4 Replies
View Related
Jan 8, 2007
I am current using Event Handlers in an SSIS package, but when adding a new EventHandler type eg. OnPreExecute, to an executable within the package, I am unable to see this new EventHandler defined in the hierarchical listing on the left hand combo box (named Executables).
Can't seem to find a Refresh option anywhere. I've only been able to see these newly created EventHandlers in the hierarchical listing by closing and re-opening the package.
Is this a 'feature' or am I missing a Refresh option somewhere.
Thanks.
View 6 Replies
View Related
Mar 22, 2007
Hi,
Can SSRS 2005 support asp.net ashx handler file to display image ? if no, is there any work around to display image dynamically based on URL ?
Thanks.
View 1 Replies
View Related
Sep 13, 2007
Dear all,
Previously I've posted about precedence error that didn't work and now it works, thanks to John Welch for his support. But when I tried to use event handler, it won't work. When error occured it didn't redirect to the OnError event handler. And then I built another package but with Data Flow task only, put a simple Script task inside OnError event handler and strange..it worked fine. There is no differences between my first Data Flow task and the last Data Flow task, totally the same process. I've captured both execution result. This is the first failure Data Flow task and the last success Data Flow Task (failure and success herein means that OnError work or not)
And then I did some testing in my last package contains a success Data Flow task. I put a new Data Flow task by copy from the previous one, execute it and OnError won't work again. Then I delete it, execute the previous one and OnError worked fine. I really don't understand why by adding a new Data Flow Task then OnError event handler won't work ?
Any help would be appreciate. Thanks in advance.
Best regards,
Hery
View 7 Replies
View Related
May 22, 2008
will a package fail if an error occurs in a task inside an event handler?
View 3 Replies
View Related
Dec 7, 2006
is there an error handler in sql stored procedures? For example if i want to do a drop something and there is a lock, i want to try return if it droped it or not and if not then try again later
View 1 Replies
View Related
Oct 24, 2005
Hi, hope this is the right forum to post in.
I found the following in the logs this morning (SLQ2k Sp3, Win2k)
quote:ex_raise2 - No handler found for exception major 36 minor 24 severity 20 - Server terminating
Followed by
quote:Problem creating stack dump file due to internal exception2005-10-23 16:52:23.71 spid2304 SQL Server Assertion: File: <p:sqlumsincumslist.h>, line=317
Failed Assertion = 'el->m_next == 0'.
Then a SQL Server restart. Not a nice thing to see first thing in the morning I'm sure you'll all agree.
However I think this all started a second or so earlier:
quote:Using 'dbghelp.dll' version '4.0.5'
*Dump thread - spid = 65, PSS = 0x3643d228, EC = 0x3643d550
quote:SQL Server Assertion: File: <recbase.cpp>, line=1374
Failed Assertion = 'm_nVars > 0'.
quote:Error: 3624, Severity: 20, State: 1.
We see several of these earlier in the day, quite similar, caused by varying items of SQL.
Finally in the same second as the ex_raise2 - on a different spid again to the others
quote:Using 'dbghelp.dll' version '4.0.5'
*Stack Dump being sent to m:sql_datalogSQLDump1702.txt
quote:SqlDumpExceptionHandler: Process 161 generated fatal exception c0000005 EXCEPTION_ACCESS_VIOLATION. SQL Server is terminating this process..
quote:Error: 0, Severity: 19, State: 0
Half a second later on spid0 (!)
quote:Open of fault log m:sql_datalogexception.log failed.
* 00A09029 Module(sqlservr+00609029) (CSubRuleRemoveSubqInFOJN::`vftable'+00000019)
If anyone has any ideas, please let me know - I've seen various posts pointing at corruption, but dbcc checkdb seems to be clear.
View 12 Replies
View Related
Mar 21, 2007
SSIS Checkpoint and restart event handling.
I am using checkpoints in my SSIS packages which determines the step at which the package failed the last time and restart at that step.
But i need some other task also to kickoff only during restart? There is not an OnRestart handler as OnError in SSIS.
How can i do this ?
View 1 Replies
View Related