问题1: 调试中出现的为问题:“ The request failed with HTTP status 401: Unauthorized。” 相同的代码,怎么会在之前的button下调试时可以成功,而放到Timer Job 里面却出现了权限的问题呢?
对于这个问题,因为我是让list2 中的数据从list1 去过来的,而这两个list 在不同服务器上,这个的实现上我采用了调用 list webservice 实现了, 在权限问题上我想过如果用 SPSecurity.RunWithElevatedPrivileges(delegate() ) 这个方法,那要怎么去用呢 ?
一下是我在 Timer Job 中 Job类 中 Execute () 方法中片段代码:
public override void Execute(Guid contentDbId)
{
SPSecurity.RunWithElevatedPrivileges(delegate()
{
SPWebApplication webApplication = this.Parent as SPWebApplication;
//SPContentDatabase contentDb = webApplication.ContentDatabases[contentDbId];
//SPList myDestinationList = contentDb.Sites[0].RootWeb.Lists["List1"];
//SPWeb myDestinationWeb = contentDb.Sites[0].OpenWeb();
nsplist.Lists List1 = new nsplist.Lists();
List1.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
List1.Url = "http://gdcckm.chn.test.com/teams/nsp/_vti_bin/Lists.asmx";
System.Xml.XmlDataDocument xmlDoc = new System.Xml.XmlDataDocument();
string listName = "{0F57EBB4-B86E-4156-BA15-409DA6769422}";
string rowLimit = "10000";
System.Xml.XmlNode nodeListItems;
System.Xml.XmlElement query = xmlDoc.CreateElement("Query");
System.Xml.XmlElement viewFields = xmlDoc.CreateElement("ViewFields");
System.Xml.XmlElement queryOptions = xmlDoc.CreateElement("QueryOptions");
nodeListItems = List1.GetListItems(listName, null, query, null, rowLimit, null);
xmlDoc.LoadXml(nodeListItems.OuterXml);
XmlNodeList nlist = xmlDoc.GetElementsByTagName("z:row");
SPSite myDestinationSite = new SPSite("http://hswsrdm0");
SPWeb myDestinationWeb = myDestinationSite.OpenWeb();
SPList myDestinationList = myDestinationWeb.Lists["List2"];
..........
............
});
} 可是在这个地方就出现了 权限那个问题,
请大侠们抽出点宝贵时间,帮忙看看。
10 个解决方案
#1
你这个Timer Job是运行在哪个Service上的?
如果是Timer Service。那么将Timer Service的运行用户在site对应的WebApp中分配Full Control的Policy。
如果是Timer Service。那么将Timer Service的运行用户在site对应的WebApp中分配Full Control的Policy。
#2
hi,能麻烦写出来让我学习下吗,我不是很清楚要怎么写你所说的policy, 在此先谢谢了啊,,
#3
List.Credentials需要赋值;
尽量给个比较高的权限;
List.Credentials = new NetworkCredential(UserName, Password, Domain);
尽量给个比较高的权限;
#4
401 没有权限
#5
有没有高手帮忙看看,希望给点仔细的回答,先谢谢了,真的很急,就这个问题折磨我好久了,,,
1. 401 错误权限这个问题要怎么解决呢?
2. 那两个list 不在同一个服务器上,在Execute () 中要怎么写呢,我的上面的写法不知道对不对,希望高手抽点时间看下我的那代码, 因为在调试的时候只是出现了 401 那个错误,
1. 401 错误权限这个问题要怎么解决呢?
2. 那两个list 不在同一个服务器上,在Execute () 中要怎么写呢,我的上面的写法不知道对不对,希望高手抽点时间看下我的那代码, 因为在调试的时候只是出现了 401 那个错误,
#6
1. 401要看具体是401.?
2.Timer Service自身就是Load balance的,里面的逻辑不用我们来关心。
3.可以enable anonymous 试试。
4.在SharePoint 安装目录中针对web service有一个web.config,可以进行一些修改试试。
2.Timer Service自身就是Load balance的,里面的逻辑不用我们来关心。
3.可以enable anonymous 试试。
4.在SharePoint 安装目录中针对web service有一个web.config,可以进行一些修改试试。
#7
我觉得这样,第一步,你先单独调试,看具体哪行出的问题。
如果是timer job:这个timer job里面调试,使用system.Environment.CurrentUser(好像是这么写)看看当前user是什么,然后把这个User在当前list1以及list2上添加full control权限。
如果是web service: 这个就需要你设置一下List的Credentials了,windows认证像3楼说的那样,如果是form的就要复杂一些了,现在我这里没有代码。
我在思考你的实现方式,timer job里使用web service的要求。。。跪求高手
如果是timer job:这个timer job里面调试,使用system.Environment.CurrentUser(好像是这么写)看看当前user是什么,然后把这个User在当前list1以及list2上添加full control权限。
如果是web service: 这个就需要你设置一下List的Credentials了,windows认证像3楼说的那样,如果是form的就要复杂一些了,现在我这里没有代码。
我在思考你的实现方式,timer job里使用web service的要求。。。跪求高手
#8
不在同一个服务器上,用webserver调用应该没什么问题吧。
401 错误 有可能是 没加IIS_USer的权限,添加下应该就没问题了。
401 错误 有可能是 没加IIS_USer的权限,添加下应该就没问题了。
#9
补充下,读数据,我建议自己写个web service,掉自己的webservice很方便的,系统的不好用。
#10
#1
你这个Timer Job是运行在哪个Service上的?
如果是Timer Service。那么将Timer Service的运行用户在site对应的WebApp中分配Full Control的Policy。
如果是Timer Service。那么将Timer Service的运行用户在site对应的WebApp中分配Full Control的Policy。
#2
hi,能麻烦写出来让我学习下吗,我不是很清楚要怎么写你所说的policy, 在此先谢谢了啊,,
#3
List.Credentials需要赋值;
尽量给个比较高的权限;
List.Credentials = new NetworkCredential(UserName, Password, Domain);
尽量给个比较高的权限;
#4
401 没有权限
#5
有没有高手帮忙看看,希望给点仔细的回答,先谢谢了,真的很急,就这个问题折磨我好久了,,,
1. 401 错误权限这个问题要怎么解决呢?
2. 那两个list 不在同一个服务器上,在Execute () 中要怎么写呢,我的上面的写法不知道对不对,希望高手抽点时间看下我的那代码, 因为在调试的时候只是出现了 401 那个错误,
1. 401 错误权限这个问题要怎么解决呢?
2. 那两个list 不在同一个服务器上,在Execute () 中要怎么写呢,我的上面的写法不知道对不对,希望高手抽点时间看下我的那代码, 因为在调试的时候只是出现了 401 那个错误,
#6
1. 401要看具体是401.?
2.Timer Service自身就是Load balance的,里面的逻辑不用我们来关心。
3.可以enable anonymous 试试。
4.在SharePoint 安装目录中针对web service有一个web.config,可以进行一些修改试试。
2.Timer Service自身就是Load balance的,里面的逻辑不用我们来关心。
3.可以enable anonymous 试试。
4.在SharePoint 安装目录中针对web service有一个web.config,可以进行一些修改试试。
#7
我觉得这样,第一步,你先单独调试,看具体哪行出的问题。
如果是timer job:这个timer job里面调试,使用system.Environment.CurrentUser(好像是这么写)看看当前user是什么,然后把这个User在当前list1以及list2上添加full control权限。
如果是web service: 这个就需要你设置一下List的Credentials了,windows认证像3楼说的那样,如果是form的就要复杂一些了,现在我这里没有代码。
我在思考你的实现方式,timer job里使用web service的要求。。。跪求高手
如果是timer job:这个timer job里面调试,使用system.Environment.CurrentUser(好像是这么写)看看当前user是什么,然后把这个User在当前list1以及list2上添加full control权限。
如果是web service: 这个就需要你设置一下List的Credentials了,windows认证像3楼说的那样,如果是form的就要复杂一些了,现在我这里没有代码。
我在思考你的实现方式,timer job里使用web service的要求。。。跪求高手
#8
不在同一个服务器上,用webserver调用应该没什么问题吧。
401 错误 有可能是 没加IIS_USer的权限,添加下应该就没问题了。
401 错误 有可能是 没加IIS_USer的权限,添加下应该就没问题了。
#9
补充下,读数据,我建议自己写个web service,掉自己的webservice很方便的,系统的不好用。