我正在尝试从sharepoint中的列表中获取项目,但我遇到了一些问题,很难解释,所以请查看代码:
try
{
using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\log\Steps_" + DateTime.Now.Day + "_at_" + DateTime.Now.Hour + "h" + DateTime.Now.Minute + ".txt", true))
{
if (SPSite.Exists(new Uri(Url)))
{
using (SPSite site = new SPSite(Url))
{
file.WriteLine("step 1 : " + DateTime.Now.Hour + "h" + DateTime.Now.Minute + " " + DateTime.Now.Second + "s " + DateTime.Now.Millisecond + "ms ");
SPList list = site.AllWebs[""].Lists["CrmInfo"];
file.WriteLine("step 2 : " + DateTime.Now.Hour + "h" + DateTime.Now.Minute + " " + DateTime.Now.Second + "s " + DateTime.Now.Millisecond + "ms ");
var items = list.GetItems();
file.WriteLine("step 3 : " + DateTime.Now.Hour + "h" + DateTime.Now.Minute + " " + DateTime.Now.Second + "s " + DateTime.Now.Millisecond + "ms ");
foreach (SPListItem item in list.Items)
{
if (item.Name.Equals("serverName"))
serverName = (string)item["Value"];
if (item.Name.Equals("orgName"))
orgName = (string)item["Value"];
if (item.Name.Equals("userName"))
userName = (string)item["Value"];
if (item.Name.Equals("userPassword"))
userPassword = (string)item["Value"];
if (item.Name.Equals("userDomain"))
userDomain = (string)item["Value"]; }
}
}
}
}
catch (Exception e)
{
using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\log\error_" + DateTime.Now.Day + "_at_" + DateTime.Now.Hour + "h" + DateTime.Now.Minute + ".txt", true))
{
file.WriteLine("An error occured on {0}th at {1}h{2}", DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute);
file.WriteLine(e.Message);
}
}
问题在于:如果我删除
using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\log\Steps_" + DateTime.Now.Day + "_at_" + DateTime.Now.Hour + "h" + DateTime.Now.Minute + ".txt", true))
(使用所有相应的file.WriteLine ...)并且我在sharepoint上部署我的功能,我得到500内部服务器错误。如果我喜欢它,它可以工作,但我想删除那部分。
有人能告诉我什么是错的吗?我真的不明白...... 谢谢。
编辑:如果我删除所有文件.WriteLine ...当我部署时,它创建一个空的(逻辑)Steps_xxxx.txt文件,但它捕获异常:
The process cannot access the file 'C:\log\Steps_17_at_12h22.txt' because it is being used by another process.
但我在其他任何地方都没有使用它!
编辑:新元素,我在我的日志文件
中得到这个错误发生在20日11时3分 在00:00:43.5159686之后等待回复时,请求通道超时。增加传递给Request的调用的超时值或增加Binding上的SendTimeout值。分配给此操作的时间可能是较长超时的一部分。 System.TimeoutException:对“http:// localhost:32843 / SecurityTokenServiceApplication / securitytoken.svc”的HTTP请求已超过分配的超时00:01:00。分配给此操作的时间可能是较长超时的一部分。 ---> System.Net.WebException:操作已超时 在System.Net.HttpWebRequest.GetResponse() at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout) ---内部异常堆栈跟踪结束--- 在System.ServiceModel.Channels.HttpChannelUtilities.ProcessGetResponseWebException(WebException webException,HttpWebRequest request,HttpAbortReason abortReason) at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout) 在System.ServiceModel.Channels.RequestChannel.Request(消息消息,TimeSpan超时) mscorlib程序
我搜索了一下修改了client.config超时(从00:00:20到00:02:00),但仍然没有工作......
事实上,有一个问题可以解决这个问题:
为什么我不能在我的功能中使用SPSite
?
我找到了一种在启动sharepoint站点时调试代码的方法(使用Debug-> Attach to process ...),我尝试了这个:
if (SPContext.Current.Site.RootWeb.Site!=null)
{
using (SPSite site = SPContext.Current.Site.RootWeb.Site)
{
我的断点位于第一行,SPContext.Current.Site.RootWeb.Site
为空...不明白为什么。
然后在我创建的日志文件中,我看到:
对象引用未设置为对象的实例。