0

SQL2008R2サーバーがあります。うまくいったように見えるウィザードを使用してパブリケーションを作成しました。「システムデータベース」セクションに「ディストリビューション」データベースがありますが、多くはありません。(これがすでに存在するかどうか、または「パブリケーションウィザード」によって作成されたかどうかはわかりません。)Web同期をセットアップし、IIS7および自己署名証明書を介してrelisapi.dllにアクセスできます。

ASP.NET Webサイトのセットアッププログラムは、SQL Express2005をインストールします。サブスクリプションの作成と初期同期をテストするための小さなサイトを作成しました。最初の同期でサーバーからすべてがプルダウンされると想定しているため、「初期」データベースを作成しません。

サブスクリプションはSQLExpressとSQL2008サーバーで作成されるため、次のコードは機能しているようです。

' 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はエラーをスローします:

パブリケーション「マイパブリケーション」のサブスクリプションを確認できませんでした。すべてのMergeAgentコマンドラインパラメーターが正しく指定されていること、およびサブスクリプションが正しく構成されていることを確認してください。パブリッシャーがこのサブスクリプションに関する情報を持っていない場合は、サブスクリプションを削除して再作成します。

サーバー上で、「Replication Monitor」を使用すると、サブスクリプションが「Unitialized」として表示されます。

1つの問題は、subscription.HostNameが間違っていることだと思います。MSDNのMicrosoftの例によると

"adventure-works\garrett1"

しかし、adventure-worksがサーバー、インスタンス、データベースのいずれであり、garrett1(ログインなど)が誰であるかは明確ではありません。では、これは実際にはどうあるべきでしょうか?

私はレプリケーションについて何も知らず、MSDNといくつかの本をフォローしているだけなので、次に進むべき場所についていくつかの指針を高く評価したいと思います。

すみません、これはとても長いです!

4

3 に答える 3

1

ドキュメントに基づくと、の設定はSubscription.Hostnameパブリケーションを機能させるために重要ではありません。これHOST_NAMEは、マージパブリケーションが分割されたときにサブスクライバーが提供する値です。フィルタリングされた出版物の詳細については、こちらをご覧ください

Web同期をサポートするように環境を正しく構成したと確信している場合は、一度に1つずつデバッグする必要があります。

パブリケーションが期待どおりに機能していることを証明するために、パブリッシャー上の別のデータベースに非Webベースのサブスクリプションを設定することから始める価値があるかもしれません。それが機能すると仮定して、SQL 2005 Expressインスタンスで非Webサブスクリプションを設定してから、Web同期のテストに進みます。

于 2010-11-26T16:30:36.937 に答える
0

わかりました、私が問題を抱えていた2つの理由がありました。

まず、開発用PCで、ある時点でマシンの名前が変更されたため、ローカルサブスクライバーSQLへの接続が間違っていました。

次に、IIS7の「自己署名証明書」は、外部からHTTPS経由で表示される可能性のある実際の名前ではなく、内部名に解決されていました。正しいドメインのテスト証明書を取得しましたが、正常に機能しました。

于 2010-12-02T11:50:27.257 に答える
0

興味のある方は、HOST_NAME()に関する詳細情報をご覧ください。

http://msdn.microsoft.com/en-us/library/ms152478%28v=SQL.110%29.aspx

基本的には、これを使用して、選択した値(サーバーのHOST_NAME関数をオーバーロードします)を使用して変数をパブリッシャーに渡します。これにより、Employee.ID = CONVERT(HOST_NAME()as int)などの行をフィルタリングして、サブスクリプションで必要な行のみを取得できます。

于 2010-12-22T16:08:15.593 に答える