Based on what I've been able to find in the WSS SDK, the only way to programmatically and remotely add a user to site is to add them to a cross-site group using the UserGroup web service. The only method call is wsUserGroup.AddUserToGroup()which adds people to a cross-site group. There appear to be no WS methods for adding people to a subsite group.
On the surface, this appears to work fine but the user gets added to the cross-site group but the invitation email they receive is for the top-level site and not the subsite we want them to use (i.e. the site that allows XXXXXCommunityUsers to add to discussion lists, etc).
Here’s the code:
UserGroup wsUserGroup = new UserGroup();
//top-level site string urlUserGroupWS = "https://sharepointcentral.sharepointsite.com/_vti_bin/UserGroup.asmx";
//subsite string urlUserGroupWS = "https://sharepointcentral.sharepointsite.com/XXXX/_vti_bin/UserGroup.asmx";
string urlUserGroupWS = "https://sharepointcentral.sharepointsite.com/_vti_bin/UserGroup.asmx";
wsUserGroup.Url = urlUserGroupWS;
wsUserGroup.Credentials = crdSuperUsers.GetCredential(uriLists, "Digest");
string sFirstName = "Foo3";
string sLastName = "Foo33";
string sRequestedLoginName = "Foofoo3";
string userName = sFirstName + " " + sLastName + " (XXXXX Member)";
string userLoginName = "apptix\\" + sRequestedLoginName;
string userEmail = "foofoo3@...";
string userNotes = "XXXXX Member since " + dtNow.ToShortDateString();
string groupName = "XXXXXCommunityUsers";
//Add the specified user to the specified cross-site group
wsUserGroup.AddUserToGroup(groupName, userName, userLoginName, userEmail, userNotes);
The obvious change to make the code use the WS relative to the XXXXX subsite url :
string urlUserGroupWS = "https://sharepointcentral.sharepointsite.com/XXXXX/_vti_bin/UserGroup.asmx"
instead of the top-level site:
string urlUserGroupWS = "https://sharepointcentral.sharepointsite.com/_vti_bin/UserGroup.asmx";
But the web service fails with HTTP 404: Not found. Typing either URL into IE will display the user friendly version of the WSDL.
Other thoughts/workarounds?
Do you know someone who can help? Share a link to this thread on twitter, or facebook.