Web Server Change Notification or Web Server Compare or MS Deploy UI for Multi Server Sync

Posted: Apr 26, 2009  39 comments  

Average Rating

Share this Post

Introduction:

If you are interested in  any of the following then you can read on:

  1. Getting notified in real time if any of the web servers in your web farm cluster has changed. This change can be in terms of:
    • An assembly that was added to the GAC (global assembly cache)
    • A registry key that was added or removed or a value added
    • Some content was added, modified, deleted or some permissions on any of the content was changed
    • A configuration change such as addition of a new web site or an app pool etc
    • A new module that was installed or configured
    • Machine config or some web configuration was modified
    • A server certificate was added / deleted
    • A new database was created
  2. Comparing any two or more servers on your cluster to see how they differ in the same terms outlined above
  3. Sync the changes that happened on any of the servers to one or more servers such as GAC or ACL changes
  4. Sync the differences between servers such as
    • GAC all assemblies on server1 that are missing on server2 or more
    • Copy all certificates from server1 to server2, 3, 4 … or just the delta
    • Copy all Databases from server1 to server2, …
    • Copy all content between servers
    • Sync the entire web server1 to all others in the farm

 

Some snapshots:

 image image image image

These snapshots show 4 views of the tool. From left to right, the first one shows comparison, second one shows changes since inception on a server,third and fourth are request panes showing the requests that can be submitted to the service.

Pre-Requisites:

These are only required on the primary server that behaves as the manager. Starting RTW Web Deployment Tool has a tempAgent feature that avoids the need to install it on any box including the source.

  1. Microsoft SQL Server Express 2005 or 2008 [Only on the primary server that manages]
  2. Web Deployment Tool  x86 or x64. [Only on the primary server that manages]
  3. MSMQ [Only on the primary server that manages. Rest the application will configure when needed or you can manually configure if you want to]

How to Use:

Step I: Install Dependencies:-
  1. On the source machine install:
    • the database and web deployment tool.
    • MSMQ by simply running ocssetup MSMQ-Server. It should be installed in a few minutes.
Step II: Copy Files:-
  1. Copy and unzip the files from here to any local folder of a system which you want to be the manager for the entire cluster.
  2. Run the CreateWSF_DB.sql.
  3. Run WebServerFarmManager.exe and navigate to the Administration tab on the right pane
  4. Here you can add the name of the servers that you need monitored.
    • For each server add the username, password, domain name, db instance name on that server and whether you want db changes to be monitored.
    • Set DoWatch to true. Any server that has this value as false, will not be monitored.
    • For any server if the user, that service will run as, has admin rights to all servers then you can leave the username and password fields blank.
  5. On this pane you can also change the default values in the app.config based on your needs.
    1. Change the db connection string
    2. Change the bin path to the location you copied the binary files to
  6. Here you can also install / uninstall the webserverfarmwatch service and start and stop the service. So go ahead and install and start the service if you have already added the databases.
Step III: Using the application
  1. The WebServerFarm Watch svc takes a snapshot of the all the servers in the farm that you listed on the servers page.
  2. Run webserverfarmmanager. One cool thing now is that it has a log messages pane that shows all the progress from all the servers in the UI. So if you happen to have connection issues or any other problems you should see that being logged in this pane. You don't need to look into any other logs.
  3. In the left pane the top pane shows the changes that have happened as of now or any of the servers. Click on any server listed in the tree view to see any changes. Mind you this IS LIVE. If you go onto any server and add an assembly to the gac or add a registry key under the ones its monitoring or add / change / modify any content or set or remove ACL this view should show you immediately. The only changes that are not live and need to be requested are the configuration changes, certificate addition and db creation. But these you can easily get just by double-clicking on any of the servers in the list. It will immediately retrieve and show you all the changes including the configuration change.
  4. The lower left pane shows the server comparison report. Since you have not compared yet it will be empty.
    • On the right pane navigate to the “Submit Requests” tab.
    • From the action drop down choose “Compare Servers”. From the list boxes below chose any one source server and choose any or all of the destination servers and submit request.
    • Wait for a few minutes to process and double-click the left lower pane node or close and re-start the app. You will see a list of server comparison nodes.
  5. Click on any of the nodes under the server comparison node in the lower left pane and you will see a comparison report of all.
  6. The name of the tabs are self explanatory. The tabs are:
    • Content: Content changes from inception or difference in content on source and destination.
      • For changes view it shows all the files that have changed in any regard or added or deleted.
      • For comparison it shows only the content folders that are missing on source or destination
    • Registry Key:
      • Changes view: Any or all changes to registry since inception. The list of registry monitored is in the regkeyManifest.xml. You can change / add / remove more keys to monitored as per your needs and restart the service. If you change this file on this parent server manager it will affect all the servers but if you change this file on any given server then the change is local
      • Comparison View: It does not compare or sync registry changes. This is because the changes to the registry are evil and I do not want to automate it.
    • Gac:
      • Changes View: Any file that was added to / removed from the GAC
      • Comparison View: All assemblies that are missing on the source or destination in the GAC. It says ONLY_ON_SOURCE or ONLY_ON_DEST in the message column.
    • Certificates
      • Changes View: Any server certificate that was added to / removed from the MY store
      • Comparison View: All server certificates that are missing on the source or destination in the MY store. It says ONLY_ON_SOURCE or ONLY_ON_DEST in the message column.
    • MS SQL DB
      • Changes View: Any database that was created since inception
      • Comparison View: All databases that are missing on the source or destination. It says ONLY_ON_SOURCE or ONLY_ON_DEST in the message column.
    • AppHostConfig or App Pool Config or Machine Config or Root Web Config
      • Changes View: Any configuration changes since inception.
      • Comparison View: All changes that would actually happen if you performed a sync.
  7. Functions:
    • Get Changes on server: This ,as explained above, is mostly live and the rest can be retrieved by double-clicking any server in the upper part of the left pane which shows servers list
    • Compare any two servers: This was again explained above in Step III item 4
    • Sync Changes: This should be useful. It lets you carry over any change that happened on one server to 1 or more servers.
      • You can selectively propagate a type of change to any of the servers you care.
      • For e.g. if 2 assemblies were added to the gac and a database was added on Server1 while 10 files were uploaded on server2.
      • Navigate to the submit requests pane and choose “Sync Changes” from the action drop down
      • Choose the GAC and DB from the changetype list.
      • Choose Server1 and any number of destination servers. It does not let you choose multiple source because these syncs are run parallel in multiple threads and not sequentially.
      • Submit request
      • Then choose Server2 as source and choose content as the changetype and re-submit request. The requests sequentially submitted are processed sequentially while the multiple requests within a request are processed simultaneously.
      • You should see the destination changes appear in the changes view
    • Sync Servers:
      • This lets you sync all the differences between any two or more servers.
      • For e.g. I have 3 servers. S1, S2 and S3.
      • S1 has 10 more assemblies gac’ed , 3 more databases and 5 extra certificates, 3 new sites, 2 new app pools than S2 and 20 more assemblies gac’ed but same number of databases and 2 fewer certificates and some apppool changes and some site differences as compared to S3.
      • Choose Sync Servers from the drop down and choose GAC, DB, Cert, Content, Apphostconfig, apppoolconfig from the changetype list
      • Choose S1 as the source and S2 and S3 as the destinations.
      • Submit request. All of the above differences will be synced except for the 2 certificates that are missing in S1.
      • Resubmit request with S3 as source and S1 as destination and change type as cert. This will sync all 3 servers.
    • Accept Changes:
      • As the name suggests, this is there to clear the db and cache of all the change lists once you are done dealing with them.

 

How it works:

A basic representation of how it works

image

 

The service: [WebServerFarmWatcher Svc]
  1. Creates two local queues if they don’t exist with the names MSDeployRequestQueue and MSDeployResponseQueue
  2. Enumerates all the servers and for each server:
    • Calls the getsnapshot function of SyncManager class
    • Instantiates an object of WebServerWatcher class
    • It then starts listening for messges on the two queues mentioned above
    • Any request received on MSDeployRequestQueue is processed and Queues a seperate thread to process every command within a request. Such as if a sync request is received from Server1 to Server2, Server3, Server4, it will queue 3 threads to serve this request
    • Any response received on MSDeployResponseQueue is added to the DB
The WebServerWatcher class:
  1. It enumerates all content folders and starts listening for any and all changes to the content.
  2. Copies the remote notification svc on the server and starts it
  3. Sends a message to get an initial snapshot of GAC, Databases and certificates
  4. Any change notification it receives for content is added to the database
The SyncManager class:
  1. This is just a wrapper for MSDeploy API
  2. It implements the basic sync, compare and getchanges functions along with the trace listeners.
The RemNotificationSvc:
  1. On start it gets all the keys specified in regkeymanifest.xml and starts waiting on change notification for these regkeys
  2. It processes requests from the WebServerWatcher for getting a GAC , DB and certificate snapshot or for changes in DB and certificate. It also resolves any assembly that is GAC’ed and provides its complete name
The WebServerFarmManager UI:
  1. All it does is display the data in the UI based on which node the data is being requested on and
  2. Submit request to the service based on the users needs.
  3. It does not listen to any MSMQ queue except the log queue.

The only ones that listen to the Queues are the parent service class on the server manager, the UI (log queue) and the remnotificationsvc on each of the servers being monitored.

Code:

You can download the entire code with the solution file from here

Acknowledgements and tool re-use:

  1. Madhur Joshi for taking his time to provide valuable feedback
  2. Web Deployment Tool which is the core of all the synchronization that this does.
  3. Junfeng Zhang for the GACWrapper that I used after some trimming of the stuff that I did not need.

 

This posting is provided "AS IS" with no warranties, and confers no rights

Comments

I have made the change to make the UI resizable. I have also uploaded the source code along with the solution file.

Thanks for the feedback

Apr 28 2009 by moshaikh

Can you elaborate what you are trying to do and the steps you have completed

May 25 2009 by moshaikh

Do you have MSDeploy installed and the MSDepSvc running on all the servers. This error is usually when the service is not running on the servers.

net start msdepsvc on all the servers and re start the WebServerFarmWatcher svc and you should have the data.

Let me know how it goes

May 26 2009 by moshaikh

I have uploaded the updated zip file. The difference is that modconfig.js has been updated to update all config files appropirately. So steps to take after which it should work are:

1. Get the latest webserverfarmmanagerbin.zip and extract it

2. Run modconfig.js

3. Since you already have database up and running on the source and msmq and msdepsvc on all, all you would need to do is stop and start webserverfarmwatcher service

net stop webserverfarmwatcher & net start webserverfarmwatcher

4. It does create logs which you can see to verify. The logs are at:

on the source: %windir%\system32\syncmanager.log and webserverwatcher_.log

These should show all activities it does

5. On the target machines being watched:

%windir%\temp\regnotificationsvc.log

This should get you up and running. Let me know if you have any issues.

May 29 2009 by moshaikh

What does it show in the logs.

Jun 02 2009 by moshaikh

This is the syncmanager.log. What about the webserverwatcher_.log. This should give you the details as to what happened with gac and other comparison requests

Jun 05 2009 by moshaikh

I resolve the error " ... 'System.data.dataSetExtensions ... " I have installed the .NEt Framework 3.5 and service pack

Jul 31 2009 by luigidef

Hi

I am looking to use this GUI tool in production environment, however i still have some confusion regarding MSSQL as prerequisite.

can some one please let me know what role MSSQL   plays here.

As i said i want to implement this is production environment to sync IIS cluster node, and i would have to explain my team leader regarding this.

if their is any help file, this it will help me a lot.

regards

Mithil

Oct 02 2009 by Mithil

MS SQL is just for getting the servers to connect to for sync or diff, storing the server diff reports, the change notification reports of the servers etc. If you dont need any storage or you are thinking of other storage mediums then you can get the code and modify it as you need.

Let me know if you have any more questions.

Oct 03 2009 by moshaikh

Hello Moshaikh  

thank you for your information

Regards

Mithil

Oct 04 2009 by Mithil

Hello

I have successfully implemented this GUI,

GUI is working, added cluster nodes to monitor, webfarmSVC installed, MSMQ installed, all OK, no error.

When i click on compare server by choosing source server and destination i get message "Request Queued Successfully"

however no comparison report is generated, i even closed the webfarmManager and reopen.

I took a look in Database, only "servers" table contains the list of server that i have added.

rest are empty.

can you please let me know where should i start to check/troubleshoot.

Regards

Mithil

Oct 08 2009 by Mithil

1. stop and start webserverfarmwatcher service

net stop webserverfarmwatcher & net start webserverfarmwatcher

2. It does create logs which you can see to verify. The logs are at:

on the source: %windir%\system32\syncmanager.log and webserverwatcher_.log

This should show all activities it does

3. On the target machines being watched:

%windir%\temp\regnotificationsvc.log

This should get you up and running. Let me know if you have any issues

Oct 08 2009 by moshaikh

Hi

I have checked those logs already those are completely empty, nothing in them.

i even had a look at MSDeployRequestQueue and MSDeployResponseQueue through "Computer Management" >> "Services and application"

I would like to ask about ModifyConfigs.js , Do i have to run this script on all the nodes or the one that manages /monitors

in this script you have defined variable as [var OrigCompName = "moshaikh3"]

i think i would have to change this name to the server name on which it resides

please let me know

Regards

Mithil

Oct 09 2009 by Mithil

Sorry for the delay in reply. I was actually modifying it so that you dont need any logs or a jscript file to modify settings etc. Its uploaded now and I have updates the blog with the latest changes. Just redownload the files and the UI should be able to give you all the information in the log pane and configuration etc can be done in the admin pane.

Let me know if you need more help.

Oct 14 2009 by moshaikh

Hi

I have download the new tool, however still some error in log tab.

==================================

15/10/2009 21:30:27:- On Start finished

15/10/2009 21:30:27:- Queued a thread with EBIZZCUST2 administrator MYPASSWORD

15/10/2009 21:30:27:- Queued a thread with EBIZZCUST3 administrator MYPASSWORD

15/10/2009 21:30:27:- Errory trying to get system value winDir : Root element is missing.

15/10/2009 21:30:27:- Errory trying to get system value processorArchitecture : Root element is missing.

15/10/2009 21:30:27:- Unable to connect to remote server EBIZZCUST3. Make Sure MSDepSvc on the remote machine is running

15/10/2009 21:30:32:- System value:winDir is C:\WINDOWS

15/10/2009 21:30:35:- System value:processorArchitecture is x86

15/10/2009 21:30:37:- EBIZZCUST2

15/10/2009 21:30:40:- EBIZZCUST2

15/10/2009 21:30:43:- EBIZZCUST2

15/10/2009 21:30:46:- Sync Successful SrcPC:EBIZZCUST2 SrcUID:administrator SrcPwd:MYPASSWORD

15/10/2009 21:30:46:- Sync Successful DestPC: DestUID: DestPwd:

15/10/2009 21:30:46:- Done dumping xmltrace

15/10/2009 21:30:50:- System value:processorArchitecture is x86

15/10/2009 21:30:52:- Sync Successful SrcPC:EBIZZCUST2 SrcUID:administrator SrcPwd:MYPASSWORD

15/10/2009 21:30:52:- Sync Successful DestPC: DestUID: DestPwd:

15/10/2009 21:30:52:- Done dumping xmltrace

15/10/2009 21:30:55:- Sync Successful SrcPC:EBIZZCUST2 SrcUID:administrator SrcPwd:MYPASSWORD

15/10/2009 21:30:55:- Sync Successful DestPC: DestUID: DestPwd:

15/10/2009 21:30:55:- Done dumping xmltrace

15/10/2009 21:30:56:- Calling tempAgent with args .\private$\MSDeployRequestQueue, FormatName:Direct=OS:EBIZZCUST3\private$\MSDeployLogQueue, FormatName:Direct=OS:EBIZZCUST3\private$\MSDeployResponseQueue

15/10/2009 21:30:56:- In SendRemoteCmd

15/10/2009 21:30:56:- CertDump with cert message sent successfully to queue FormatName:Direct=OS:EBIZZCUST2\private$\MSDeployRequestQueue

15/10/2009 21:30:56:- Exception while getting contentCould not find a part of the path '\\ebizzcust2\C$\windows\system32\inetsrv\config\applicationhost.config'.

15/10/2009 21:30:56:- All threads finished successfully

15/10/2009 21:30:56:- Exception when re-registering for Receive

15/10/2009 21:30:53:EBIZZCUST2:Exception in Processing MessageObject reference not set to an instance of an object.

15/10/2009 21:30:52:EBIZZCUST2:15/10/2009 21:30:52: Service started. The files are at:C:\WINDOWS\system32

15/10/2009 21:30:53:EBIZZCUST2:Received request: <?xml version="1.0" encoding="utf-16"?><RequestMessage operationType="Compare Servers"><server sourceServer="EBIZZCUST2" destServer="EBIZZCUST3" /></RequestMessage>

15/10/2009 21:30:53:EBIZZCUST2:Exception in Processing MessageObject reference not set to an instance of an object.

15/10/2009 21:30:53:EBIZZCUST2:Received request: <?xml version="1.0" encoding="utf-16"?><RequestMessage operationType="Get Changes"><server sourceServer="EBIZZCUST2"><action actionType="Content" /><action actionType="RegKey" /><action actionType="GAC" /><action actionType="Cert" /><action actionType="MSSQLDB" /><action actionType="AppHostConfig" /><action actionType="AppPoolConfig" /><action actionType="MachineConfig" /><action actionType="RootWebConfig" /><action actionType="Web Config" /></server><server sourceServer="EBIZZCUST3"><action actionType="Content" /><action actionType="RegKey" /><action actionType="GAC" /><action actionType="Cert" /><action actionType="MSSQLDB" /><action actionType="AppHostConfig" /><action actionType="AppPoolConfig" /><action actionType="MachineConfig" /><action actionType="RootWebConfig" /><action actionType="Web Config" /></server></RequestMessage>

15/10/2009 21:30:53:EBIZZCUST2:Exception in Processing MessageObject reference not set to an instance of an object.

15/10/2009 21:30:53:EBIZZCUST2:Received request: <?xml version="1.0" encoding="utf-16"?><RequestMessage operationType="Get Changes"><server sourceServer="EBIZZCUST2"><action actionType="Content" /><action actionType="RegKey" /><action actionType="GAC" /><action actionType="Cert" /><action actionType="MSSQLDB" /><action actionType="AppHostConfig" /><action actionType="AppPoolConfig" /><action actionType="MachineConfig" /><action actionType="RootWebConfig" /><action actionType="Web Config" /></server><server sourceServer="EBIZZCUST3"><action actionType="Content" /><action actionType="RegKey" /><action actionType="GAC" /><action actionType="Cert" /><action actionType="MSSQLDB" /><action actionType="AppHostConfig" /><action actionType="AppPoolConfig" /><action actionType="MachineConfig" /><action actionType="RootWebConfig" /><action actionType="Web Config" /></server></RequestMessage>

15/10/2009 21:30:53:EBIZZCUST2:Exception in Processing MessageObject reference not set to an instance of an object.

15/10/2009 21:30:53:EBIZZCUST2:Received request: <RequestMessage operationType="CertDump" path="cert" />

15/10/2009 21:30:53:EBIZZCUST2:Received CertDump with cert

15/10/2009 21:30:53:EBIZZCUST2:Sending  message to FormatName:Direct=OS:EBIZZCUST3\private$\MSDeployResponseQueue

-------------------------------------------------------------------------------------------

When Compare is perform

below log are generated

15/10/2009 21:30:57:- Received reqest to add to DB CertDump EBIZZCUST2

15/10/2009 21:30:57:- Exec cmd to DB CertDump EBIZZCUST2 AddCertDump

Can you please take a look and let me know what went wrong.

regards

Mithil

Oct 15 2009 by Mithil

There are two issues from the log apparently. One is that its not able to connect to EBIZZCUST3. It connected to the other machine EBIZZCUST2 but that machine is not able to process messages recieved.

We can get this nailed and I can send you a private that gives you more insight.

Oct 16 2009 by moshaikh

Do you have the latest code that I have uploaded. If you do, then in the log pane it should tell you the reason. If you can tell me what you see in the log pane then that will help to diagnose further

Oct 16 2009 by moshaikh

Hello

This is really great tool, it had ease my admin task to sync iis cluster

I had implemented this on 2008 iis7 cluster server and its working perfectly,

planning to implement this on my other production server.

thanks

Mithil

Oct 22 2009 by Mithil

Hello

This is really great tool, it had ease my admin task to sync iis cluster

I had implemented this on 2008 iis7 cluster server and its working perfectly,

planning to implement this on my other production server.

thanks

Mithil

Oct 22 2009 by Mithil

One of the tabs on the GUI is "Log Messages". Check on it.

Oct 23 2009 by moshaikh

That is an old one. Why dont you get the latest source and the binaries that I have uploaded. That will make it much easier to work with and see the progress logs, etc all in one place.

Oct 23 2009 by moshaikh

Is it possible to use a SQL cluster instead of the SQL Express for the primary servers database?

Oct 27 2009 by plemaster

You should be able to use SQL Cluster but for this you have to provide the appropriate connection string in the UI and save the configuration. For cluster connection strings you can see this blog: blogs.msdn.com/.../unable-to-connect-to-a-sql-server-named-instance-on-a-cluster.aspx

Oct 27 2009 by moshaikh

Did you update the connection string in the Administration pane of the GUI and save?

Oct 27 2009 by moshaikh

Did you set DoWatch to true on all servers? Did you restart the service after adding the servers? What does it show on the log messages pane?

Oct 28 2009 by moshaikh

Yes, as of now it does not support IIS6. I am in the process of adding that support. You just have to make changes to syncmanager.cs in the webserverwatcherfarmsvc and it should work. If you wish you can get the source and do that.

Oct 28 2009 by moshaikh

Are you trying to run two instances of the service? It just needs to connect to the first server where it has the webserverfarmmanager db created to read the settings specific to your case. Once its connected you dont need to change the server name. Just provide all the servers you add monitored and start the service. The connection string is ONLY FOR FIRST TIME run when you are trying to connect to the settings database.

Oct 28 2009 by moshaikh

So are you saying for the second server monitored, i leave the SQL part blank?

Oct 30 2009 by K-Dubb

Ok i tred that and I get cannot connect to DB.  Maybe that is not what you meant.

Basically:

First row of servers to be monitored is all filled out with my sqlexpress instance, and all.  It takes fine.

I add a second row of another server, and i get the error.  It doesnt matter if I enter a DBInstanceName (Which i assume would only be the same as the first) or not.  

Oct 30 2009 by K-Dubb

Any thoughts? Sorry I was not signed in when i was posting before.

thanks.

Nov 05 2009 by K-Dubb

Hi Owais.

hope all fine and good.

IS windows 2003 iis6 compatible sync ready,

regards

Mithil

Nov 12 2009 by Mithil

All this means is that you submitted a request to compare two servers SAS-IIS-02 and SAS-IIS-01 and it was not able to find SAS-IIS-02 in the original snapshot list.

This can happen when you add a server after you have started the service so the initial snapshot was never taken. All you need to do is stop and start the service from the administrator pane.

Also regarding your earlier question:

Yes you can use any SQL Sever including azure as long as you provide the appropriate connection string. The sql script would have to run on the remote server if the server is remote. Remember this is only on ONE server which ever is the controller.

May 26 2010 by moshaikh

Thanks moshaikh.

I'm afraid I'm still struggling :-(

After starting the service, I get the following in the log:

27/05/2010 3:17:05 PM:SyncManager:- Errory trying to get system value winDir : System.Xml.XmlException: Root element is missing.

  at System.Xml.XmlTextReaderImpl.Throw(Exception e)

  at System.Xml.XmlTextReaderImpl.ParseDocumentContent()

  at System.Xml.XmlLoader.Load(XmlDocument doc, XmlReader reader, Boolean preserveWhitespace)

  at System.Xml.XmlDocument.Load(XmlReader reader)

  at System.Xml.XmlDocument.LoadXml(String xml)

  at WebServerFarmWatchSvc.SyncManager.GetSystemValue(String strComputerName, String strUserName, String strPassword, String strAttributeName)

27/05/2010 3:17:05 PM:SyncManager:- Errory trying to get system value processorArchitecture : System.Xml.XmlException: Root element is missing.

  at System.Xml.XmlTextReaderImpl.Throw(Exception e)

  at System.Xml.XmlTextReaderImpl.ParseDocumentContent()

  at System.Xml.XmlLoader.Load(XmlDocument doc, XmlReader reader, Boolean preserveWhitespace)

  at System.Xml.XmlDocument.Load(XmlReader reader)

  at System.Xml.XmlDocument.LoadXml(String xml)

  at WebServerFarmWatchSvc.SyncManager.GetSystemValue(String strComputerName, String strUserName, String strPassword, String strAttributeName)

27/05/2010 3:17:11 PM:SyncManager:- Exception trying to get dump provider:Microsoft.Web.Deployment.DeploymentAgentUnavailableException: Remote agent (URL sasiis02/f1103919-fa15-4062-a88b-29c5a3da3c5f) could not be contacted.  Make sure the remote agent service is installed and started on the target computer. ---> Microsoft.Web.Deployment.DeploymentException: An unsupported response was received. The response header 'MSDeploy.Response' was '' but 'v1' was expected. ---> System.Net.WebException: The remote server returned an error: (404) Not Found.

  at System.Net.HttpWebRequest.GetResponse()

  at Microsoft.Web.Deployment.AgentClientProvider.GetHttpResponse(HttpWebRequest request)

  --- End of inner exception stack trace ---

  --- End of inner exception stack trace ---

  at Microsoft.Web.Deployment.AgentClientProvider.GetHttpResponse(HttpWebRequest request)

  at Microsoft.Web.Deployment.AgentClientProvider.PerformHeadRequestForAuthentication()

  at Microsoft.Web.Deployment.AgentClientProvider..ctor(DeploymentProviderContext providerContext, DeploymentBaseContext baseContext)

  at Microsoft.Web.Deployment.DeploymentManager.CreateObjectPrivate(DeploymentProviderContext providerContext, DeploymentBaseOptions baseOptions, DeploymentObject sourceObject)

  at WebServerFarmWatchSvc.SyncManager.DumpProvider(String strProvider, String strPath, String strComputername, String strUserName, String strPassword, String strOutXmlFilePath)

27/05/2010 3:17:17 PM:SyncManager:- Exception trying to get dump provider:Microsoft.Web.Deployment.DeploymentAgentUnavailableException: Remote agent (URL sasiis02/9e8db471-feb0-4958-9eb6-36f0fd12483a) could not be contacted.  Make sure the remote agent service is installed and started on the target computer. ---> Microsoft.Web.Deployment.DeploymentException: An unsupported response was received. The response header 'MSDeploy.Response' was '' but 'v1' was expected. ---> System.Net.WebException: The remote server returned an error: (404) Not Found.

  at System.Net.HttpWebRequest.GetResponse()

  at Microsoft.Web.Deployment.AgentClientProvider.GetHttpResponse(HttpWebRequest request)

  --- End of inner exception stack trace ---

  --- End of inner exception stack trace ---

  at Microsoft.Web.Deployment.AgentClientProvider.GetHttpResponse(HttpWebRequest request)

  at Microsoft.Web.Deployment.AgentClientProvider.PerformHeadRequestForAuthentication()

  at Microsoft.Web.Deployment.AgentClientProvider..ctor(DeploymentProviderContext providerContext, DeploymentBaseContext baseContext)

  at Microsoft.Web.Deployment.DeploymentManager.CreateObjectPrivate(DeploymentProviderContext providerContext, DeploymentBaseOptions baseOptions, DeploymentObject sourceObject)

  at WebServerFarmWatchSvc.SyncManager.DumpProvider(String strProvider, String strPath, String strComputername, String strUserName, String strPassword, String strOutXmlFilePath)

27/05/2010 3:17:17 PM:WSFWSvc:- Unable to connect to remote server SASIIS02. Make Sure MSDepSvc on the remote machine is running

MsDepSvc is running on both servers.  I have renamed the servers to remove hyphens from the names in case this caused problems.  I'm running Windows 2008 R2 on both servers.  From what I can tell, I've allowed MSDeploy to work through the Windows Firewalls.  Is there a simple test (telnet to MsDepSvc for example) to see if traffic is getting through?

I'm also running SQL Express 2008 with SP1 during testing.  In production we will be running SQL 2008 with SP1 in a cluster.

Thx

May 27 2010 by mfeodoroff

Ok,  so there's some bizarre firewall issue with the remote W2K8 R2 box.  Logs don't show packets getting dropped, but WSFM only works if I allow all ports on the Public Profile...I'll come back to this after I get WSFM running nicely.

Is it possible to get a screen shot of your administration page to see how the servers should be setup?  I'm a little confused about how the local and remote servers should be configured, particular with providing passwords, and specifying instance names (for both?).

I'm making progress, but even though the log suggests data is being collected, WSFM doesn't show anything in the first 5 tabs...  Am I missing something here?  Do I need to run a msdeploy command in order to populate the DB?

Thx

May 27 2010 by mfeodoroff

As you can see, I'm really spending a bit of energy on this, given the potential of the app :-)

I'm nearly there now.  I get this in the log still:

28/05/2010 11:52:13 AM:WSFWSvc:- Received request: <?xml version="1.0" encoding="utf-16"?><RequestMessage operationType="Sync Changes"><server sourceServer="Server1" destServer="Server2"><action actionType="Content" /><action actionType="Content" /></server></RequestMessage>

28/05/2010 11:52:13 AM:WSFWSvc:- The specified servername Server1 is not valid.

The bottom line is the one that concerns me the most.

May 27 2010 by mfeodoroff

I try to sync two machines with this utility. I configure them, but when i try to connect i receibe the next message:

23-08-2010 10:51:30:WSFWSvc:- The specified servername dcintranets2 is not valid.

23-08-2010 10:51:33:WSFWSvc:- The specified servername  dcintranets1 is not valid.

23-08-2010 10:51:56:WSFWSvc:- The specified servername dcintranets2 is not valid.

24-08-2010 9:14:24:WSFWSvc:- The specified servername  dcintranets1 is not valid.

24-08-2010 9:15:38:WSFWSvc:- The specified servername  dcintranets1 is not valid.

24-08-2010 9:15:38:WSFWSvc:- The specified servername dcintranets2 is not valid.

If i launch a wdeploy command i don't have any problems...

C:\Windows\System32>msdeploy.exe -verb:dump -source:contentPath="c:\applicationcenter",computername=dcintranets1

Anyone have any ideas.. i'm lost!

Best regards!

Aug 24 2010 by robertodocampo

Just ran across this from a web search... I downloaded the .zip file but it seems to have been created with a previous version of Visual Studio.  I can't run the program in VS2010.  

Any suggestions?  I really wanted to see what the capabilities were.  I'm trying to do something similar and this would be a great headstart.

Jul 08 2011 by webRonin

Hey webRonin,

Glad to hear that you are trying to use it. If you open the project file in VS2010, it should automatically do an in place upgrade to VS2010 format. DOes this not happen?

Jul 13 2011 by moshaikh

Hi moshaikh

Thanks for sharing the code.We want to use it on production environment.

We do have problem on syncing content on real time.We initialize watcher on multiple servers.When content of one server change ,it syncs to other servers,since the watcher is initialize to other servers,they also notice the change and sync the same file  again to the source server.So there is cyclic redundancy.The problem is the source server sync change to destination server,again the destination server sync the same change to source server which is not required.We would be grateful if you suggest us how to solve this problem.

Thanks

Sep 26 2013 by IISSantosh

Submit a Comment

  • Plain text is accepted.
  • URLs starting with http:// are converted to links.