博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
记录一个问题的解决方法
阅读量:6177 次
发布时间:2019-06-21

本文共 3725 字,大约阅读时间需要 12 分钟。

症状

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

无法创建新的web application (CA > Application Management > Create or extend Web application > Create a new Web application)

报错的stack:

Object reference not set to an instance of an object. at Microsoft.SharePoint.ApplicationPages.GlobalAdminPageBase.get_DefaultContentDatabaseName()

at Microsoft.SharePoint.ApplicationPages.ExtendVirtualServerPage.OnLoad(EventArgs e)
at System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

无法配置default database (CA > Operations > Default Database Server)

Object reference not set to an instance of an object. at Microsoft.SharePoint.ApplicationPages.DefaultContentDatabasePage.OnLoad(EventArgs e)

at System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

 

经过看Dump的步骤排查, 发现SPWebService的DefaultDatabaseInstance属性丢失了. 于是写了下面的代码进行修复尝试:

static void Main(string[] args){    SPFarm ofarm = SPFarm.Local;     //Get SPWebService Object    SPWebService oservice = ofarm.Services.GetValue
(); //Verify if the current SPDatabaseServiceInstance object is null SPDatabaseServiceInstance oinstance = oservice.DefaultDatabaseInstance; if (oservice.DefaultDatabaseInstance == null) { Console.WriteLine("Notice!!! SPDatabaseServiceInstance is null."); //Get DB Server SPServer object SPServerCollection servers = SPFarm.Local.Servers; SPServer oServer1 = servers["sql"]; //Replace it with our DB server name. ofarm.Servers.Ensure(oServer1); //Get SPDatabaseService object, we will use it as argument to create new SPDatabaseServiceInstance SPDatabaseService oDBService = ofarm.Services.GetValue
(""); //Create new SPDatabaseServiceInstance object, and verify it. SPDatabaseServiceInstance onewinstance = new SPDatabaseServiceInstance("MSSQLSERVER", oServer1, oDBService); oServer1.ServiceInstances.Ensure(onewinstance); //Fix the issue by assign SPDatabaseServiceInstance object to DefaultDatabaseInstance. oservice.DefaultDatabaseInstance = onewinstance; oservice.Update();}

 

第二个症状解决了, 页面可以打开了. 但是在后续的测试中, 发现了其他的问题, 报错Unknown Error.

19:59.3

w3wp.exe (0x0E78)                      

0x0D28

Windows SharePoint Services  

Database                     

5586

Critical

Unknown SQL Exception 87 occured. Additional error information from SQL Server is included below.  A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 25 - Connection string is not valid)

 

 

 

后来, 我的同事Adam解决了这个问题. 方法还是使用Object Model对SPWebService的DefaultDatabaseInstance属性进行赋值.

但是不能用New的对象, 应该使用SharePoint服务器场中已经存在的对象.

对Config DB中的对象进行查询, 寻找到类型为Microsoft.SharePoint.Administration.SPDatabaseServiceInstance的对象. 注意, 如果场中有多个DB服务器的话, 需要选择寄存这Config DB的那个DB服务器.

使用下面的语句对config DB进行查询, 得到一个ID. 把这个ID作为参数传给下面的代码:

 

private static void Main(string[] args){    string g = args[0];    SPWebService service = SPFarm.get_Local().get_Services().GetValue
(); SPDatabaseServiceInstance instance = SPFarm.get_Local().GetObject(new Guid(g)); service.set_DefaultDatabaseInstance(instance); service.Update(); Console.WriteLine("The current content web service's default database is changed to {0}", g);}

 

结末的教训是:

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

当SharePoint中某个对象的某个属性丢失的时候, 如果要通过Object Model对其赋值的话, 那么需要小心.

该属性如果是个简单类型, 比如整型, 或字符串, 那么可以直接赋掉.

如果是个对象, 那么极有可能需要用一个场中已经存在了的对象进行赋值. 我们手动创建的对象很可能缺少这样或那样的metadata.

转载地址:http://ubwda.baihongyu.com/

你可能感兴趣的文章
智能机与功能机——发展中国家的测试
查看>>
ASP.NET MD5加密
查看>>
Cannot open precompiled header file:'Debug/password.pch' No such file or directory
查看>>
Parcelable的使用——通过Intent传递对象
查看>>
Unable to instantiate fragment make sure class nam
查看>>
YII模型的增删改查
查看>>
chrome隐藏命令
查看>>
table的td合并
查看>>
「转」framebuffer驱动
查看>>
用php获取56视频无广告播放地址
查看>>
什么是商业智能
查看>>
OpenStack设计与实现(二)Libvirt简介与实现原理
查看>>
Fastjson序列化导致BeetlSQL无限循环查询的解决方案
查看>>
spring 系列教程一:概述
查看>>
Docker 被墙的解决方法
查看>>
CentOS上安装redis
查看>>
pam后门 和应用实例
查看>>
Android 4.3源码的下载
查看>>
缓存中常见的一些问题
查看>>
浅谈struts1和struts2框架(转载+整理)
查看>>