我有一台SQL 2008 R2服务器。 我使用向导创建了一个出版物,似乎没问题。 “系统数据库”部分中有一个“分发”数据库,其中没有很多。 (不确定是否已存在或者“发布向导”是否已创建它。) 我已经设置了网络同步,并可以通过IIS7和自签名证书访问relisapi.dll。
我的ASP.NET网站的安装程序安装了SQL Express 2005。 我写了一个小网站来测试订阅和初始同步的创建。 我没有“创建一个初始”数据库,因为我假设第一次同步会从服务器中取出所有内容。
以下代码似乎有效,因为订阅是在SQL Express&在SQL 2008服务器中。
' Define the pull subscription.
subscription = New MergePullSubscription()
subscription.ConnectionContext = subscriberConn
subscription.PublisherName = publisherName
subscription.PublicationName = publicationName
subscription.PublicationDBName = publicationDbName
subscription.DatabaseName = subscriptionDbName
subscription.HostName = hostname
subscription.CreateSyncAgentByDefault = True
' Specify the Windows login credentials for the Merge Agent job.
subscription.SynchronizationAgentProcessSecurity.Login = winLogin
subscription.SynchronizationAgentProcessSecurity.Password = winPassword
' Enable Web synchronization.
subscription.UseWebSynchronization = True
subscription.InternetUrl = webSyncUrl
' Specify the same Windows credentials to use when connecting to the
' Web server using HTTPS Basic Authentication.
subscription.InternetSecurityMode = AuthenticationMethod.BasicAuthentication
subscription.InternetLogin = winLogin
subscription.InternetPassword = winPassword
If Not subscription.LoadProperties() Then
' Create the pull subscription at the Subscriber.
subscription.Create()
然后我运行这段代码:
If Not subscription.PublisherSecurity Is Nothing Or _
subscription.DistributorSecurity Is Nothing Then
'0: Only error messages are logged.
'1: All progress report messages are logged.
'2: All progress report messages and error messages are logged.
subscription.SynchronizationAgent.OutputVerboseLevel = 2
subscription.SynchronizationAgent.Output = "c:\createmerge.txt"
' Synchronously start the Merge Agent for the subscription.
subscription.SynchronizationAgent.Synchronize()
但syncronize会抛出错误:
无法验证发布“我的出版物”的订阅。确保正确指定了所有合并代理程序命令行参数,并且正确配置了预订。如果发布者不再拥有有关此订阅的信息,请删除并重新创建订阅。
在服务器上,使用“复制监视器”,它将我的订阅显示为“Unitialized”。
我认为一个问题是我的subscription.HostName错了。 MSDN上的Microsoft示例说
"adventure-works\garrett1"
但目前尚不清楚冒险作品是服务器,实例还是数据库,谁是garrett1(登录或其他)。那应该是什么呢?
由于我对复制一无所知,而且我一直在关注MSDN和一些书籍,所以我会指出下一步的指示。
对不起,这太久了!
答案 0 :(得分:1)
基于the documentation,Subscription.Hostname
的设置对于使发布工作并不重要 - 它是订阅者在合并发布分区时为HOST_NAME
提供的价值。有关筛选出版物的详细信息,请参阅here。
如果您确信自己有correctly configured your environment支持网络同步,那么您将不得不一次调试这一部分。
首先,可以通过为发布者上的另一个数据库设置非基于Web的订阅来证明该发布是按预期工作的。假设有效,请尝试在SQL 2005 Express实例上设置非Web订阅,然后继续测试Web同步。
答案 1 :(得分:0)
好的,我遇到麻烦有两个原因。
首先在我的开发PC上,机器已经在某个时候被重命名,因此与本地用户SQL的连接是错误的。
其次,IIS7上的“自签名证书”正在解析为内部名称,而不是通过外部HTTPS可以看到的真实姓名。我们获得了正确域名的测试证书,并且工作正常!
答案 2 :(得分:0)
好的,如果你有兴趣的话,还有关于HOST_NAME()的更多信息。
http://msdn.microsoft.com/en-us/library/ms152478%28v=SQL.110%29.aspx
基本上,您使用它将变量传递给发布者,并使用您选择的值(这会使服务器上的HOST_NAME函数重载)。这允许您过滤行,例如Employee.ID = CONVERT(HOST_NAME()为int),以仅获取子语句中所需的行。