Could not connect to server <servername> for application ‘SharedServices’ event ID: 6482

本文介绍了解决Office SharePoint Server 2007中搜索服务连接错误的方法,包括停止与重新启动服务、安装IIS6.0资源工具包及设置SSL证书等步骤。

当满足下列条件都为真时,会出现此问题:

  • 运行 Office SharePoint Server 2007 的服务器已在服务器场中的查询角色。
  • 服务器场已使用 Microsoft.net 框架 3.5 服务包 1 (SP1) 更新。
  • 查询服务器和索引服务器的角色不在服务器场中的同一台服务器上。


“Could not connect to server <servername> for application ‘SharedServices’. This error might occur if the server is not responding to client requests, the firewall or proxy configuration is preventing the server from being contacted, or the search administration Web service is not running on the server.”


Event Type: Error
Event Source: Office SharePoint Server
Event Category: Office Server Shared Services 
Event ID: 6482
Date: 6/25/2012
Time: 11:47:00 AM
User: N/A


  1. 停止 Office SharePoint Services 搜索服务。若要这样做,请按照下列步骤操作:
    1. 单击 开始、 单击 运行,键入 cmd,然后单击 确定
    2. 命令提示符键入 净停止 osearch,然后按 ENTER 键。
    3. 键入要退出命令提示符下的 退出
  2. 下载并安装 IIS 6.0 资源工具包工具。若要获取 IIS 6.0 资源工具包工具,请访问下面的 Microsoft 网站:
  3. 在已安装的 Office SharePoint 2007 的服务器场中的每个服务器上,请按照下列步骤操作:
    1. 单击 开始、 单击 运行,键入 cmd,然后单击 确定
    2. 导航到 IIS 6.0 资源工具包工具的位置 (默认位置是: C:\Program Files\IIS Resources\SelfSSL
    3. 命令提示符键入 selfssl /s:951338967 /v:1000,然后按 ENTER 键。 

      备注
      • 对于 64 位服务器,951338967 是默认的 Office 服务器 Web 服务证书的 ID。
      • 对于 32 位服务器,1720207907 是默认的 Office 服务器 Web 服务证书的 ID。 您可以检查该 ID 的 Office 服务器 Web 服务从 IIS。
      • 该证书将是有效的天数为 1000年。
      • 您需要运行 Office 服务器 Web 服务站点的服务器场中每个 MOSS 服务器上执行 selfssl 命令。
      • SharePoint 部分在后台,用户通常不需要注意的服务器场服务器之间使用 SSL 名称解析。
  4. 启动 Office SharePoint Services 搜索服务。若要这样做,请按照下列步骤操作:
    1. 命令提示符键入 net start osearch,然后按 ENTER 键。
    2. 键入要退出命令提示符下的 退出
  5. 下载并安装以下更新到.net 框架 3.5 SP1。有关详细的信息请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
    959209  有可用更新的.net Framework 3.5 Service Pack 1



JAVA 如何解析下列php 文件 <?php header('Content-Type: application/vnd.dvb.ait+xml'); // Set the cache as 'fresh' for 5 minutes. header('Cache-Control: max-age=300'); echo '<?xml version="1.0" encoding="utf-8"?> <mhp:ServiceDiscovery xmlns:mhp="urn:dvb:mhp:2009" xmlns:ipi="urn:dvb:metadata:iptv:sdns:2008-1" xmlns:tva="urn:tva:metadata:2005" xmlns:mpeg7="urn:tva:mpeg7:2005" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:dvb:mhp:2009 mis_xmlait.xsd"> <mhp:ApplicationDiscovery DomainName="hbbtv.de"> <mhp:ApplicationList> <mhp:Application> <mhp:appName Language="eng">org.hbbtv_OPAPP_APP09</mhp:appName> <mhp:applicationIdentifier> <mhp:orgId>' . $_GET['orgId'] . '</mhp:orgId> <mhp:appId>3952</mhp:appId> </mhp:applicationIdentifier> <mhp:applicationDescriptor> <mhp:type> <mhp:OtherApp>application/vnd.hbbtv.xhtml+xml</mhp:OtherApp> </mhp:type> <mhp:controlCode>AUTOSTART</mhp:controlCode> <mhp:visibility>VISIBLE_ALL</mhp:visibility> <mhp:serviceBound>false</mhp:serviceBound> <mhp:priority>1</mhp:priority> <mhp:version>0</mhp:version> <mhp:mhpVersion> <mhp:profile>0</mhp:profile> <mhp:versionMajor>1</mhp:versionMajor> <mhp:versionMinor>4</mhp:versionMinor> <mhp:versionMicro>1</mhp:versionMicro> </mhp:mhpVersion> </mhp:applicationDescriptor> <mhp:applicationTransport xsi:type="mhp:HTTPTransportType"> <mhp:URLBase>https://' . $_SERVER['SERVER_NAME'] . '/_TESTSUITE/TESTS/org.hbbtv_OPAPP_APP09/</mhp:URLBase> </mhp:applicationTransport> <mhp:applicationLocation>index_opApp_2.html5</mhp:applicationLocation> </mhp:Application> </mhp:ApplicationList> </mhp:ApplicationDiscovery> </mhp:ServiceDiscovery> '; ?>
最新发布
10-16
<think>我们需要解析的是PHP文件,但我们的目标是用Java来解析这个PHP文件。然而,请注意,这个PHP文件实际上是一个动态生成XML的脚本。我们并不需要执行PHP代码,而是需要模拟PHP脚本的行为,即根据请求参数生成相应的XML文档。 在Java中,我们通常不会直接执行PHP脚本,而是模拟其逻辑。具体来说,这个PHP脚本做了以下几件事: 1. 设置HTTP响应头:Content-Type和Cache-Control。 2. 输出一个XML字符串,其中包含从GET请求参数中获取的`orgId`和服务器变量`$_SERVER['SERVER_NAME']`。 因此,在Java中,我们可能需要: - 创建一个能够接收HTTP请求的Web服务(例如使用Servlet)。 - 从请求中获取参数`orgId`。 - 获取服务器的名称(类似于PHP中的`$_SERVER['SERVER_NAME']`)。 - 根据这些参数动态生成XML字符串。 - 设置相应的响应头。 但是,如果问题仅仅是“解析”这个PHP文件,可能有两层意思: 1. 在Java中执行这个PHP文件并获取输出?这通常不推荐,因为需要Java调用PHP解释器,效率低且复杂。 2. 解析这个PHP文件中的模板,以便在Java中生成类似的动态XML?这更常见。 根据上下文,我猜测是第二种:我们需要在Java中实现一个类似的功能,即生成同样的XML内容,但使用Java技术栈。 因此,我们可以在Java中写一个Servlet,动态生成XML。 假设我们使用Java Servlet,以下是一个示例: 步骤: 1. 创建一个Servlet,映射到某个URL(比如`/ServiceDiscovery`)。 2. 在Servlet的`doGet`方法中: - 设置响应内容类型为`application/vnd.dvb.ait+xml` - 设置缓存头`Cache-Control: max-age=300` - 获取请求参数`orgId` - 获取服务器名称(通过`request.getServerName()`) - 使用字符串模板(或XML构建工具)构建XML字符串,将`orgId`和服务器名称插入到相应位置。 - 将XML字符串写入响应。 注意:在Java中,我们应避免使用字符串拼接来构建XML(因为容易出错且不安全),但为了简单演示,这里使用字符串格式化。在实际应用中,建议使用XML构建器(如DOM、JAXB等)。 但是,由于这个XML结构固定,只有两处动态内容(`orgId`和服务器名称),我们可以使用`String.format`或使用模板引擎。 下面是一个使用`String.format`的简单示例: ```java import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/ServiceDiscovery") public class ServiceDiscoveryServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 设置响应内容类型 response.setContentType("application/vnd.dvb.ait+xml"); // 设置缓存头 response.setHeader("Cache-Control", "max-age=300"); // 获取请求参数orgId,如果没有提供,则使用空字符串(或者根据需求处理) String orgId = request.getParameter("orgId"); if (orgId == null) { orgId = ""; // 或者可以设置一个默认值,或者返回错误 } // 获取服务器名称 String serverName = request.getServerName(); // 构建XML字符串 String xmlContent = String.format( "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" + "<mhp:ServiceDiscovery xmlns:mhp=\"urn:dvb:mhp:2009\" xmlns:ipi=\"urn:dvb:metadata:iptv:sdns:2008-1\" xmlns:tva=\"urn:tva:metadata:2005\" xmlns:mpeg7=\"urn:tva:mpeg7:2005\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"urn:dvb:mhp:2009 mis_xmlait.xsd\">\n" + " <mhp:ApplicationDiscovery DomainName=\"hbbtv.de\">\n" + " <mhp:ApplicationList>\n" + " <mhp:Application>\n" + " <mhp:appName Language=\"eng\">org.hbbtv_OPAPP_APP09</mhp:appName>\n" + " <mhp:applicationIdentifier>\n" + " <mhp:orgId>%s</mhp:orgId>\n" + // 这里插入orgId " <mhp:appId>3952</mhp:appId>\n" + " </mhp:applicationIdentifier>\n" + " <mhp:applicationDescriptor>\n" + " <mhp:type>\n" + " <mhp:OtherApp>application/vnd.hbbtv.xhtml+xml</mhp:OtherApp>\n" + " </mhp:type>\n" + " <mhp:controlCode>AUTOSTART</mhp:controlCode>\n" + " <mhp:visibility>VISIBLE_ALL</mhp:visibility>\n" + " <mhp:serviceBound>false</mhp:serviceBound>\n" + " <mhp:priority>1</mhp:priority>\n" + " <mhp:version>0</mhp:version>\n" + " <mhp:mhpVersion>\n" + " <mhp:profile>0</mhp:profile>\n" + " <mhp:versionMajor>1</mhp:versionMajor>\n" + " <mhp:versionMinor>4</mhp:versionMinor>\n" + " <mhp:versionMicro>1</mhp:versionMicro>\n" + " </mhp:mhpVersion>\n" + " </mhp:applicationDescriptor>\n" + " <mhp:applicationTransport xsi:type=\"mhp:HTTPTransportType\">\n" + " <mhp:URLBase>https://%s/_TESTSUITE/TESTS/org.hbbtv_OPAPP_APP09/</mhp:URLBase>\n" + // 这里插入serverName " </mhp:applicationTransport>\n" + " <mhp:applicationLocation>index_opApp_2.html5</mhp:applicationLocation>\n" + " </mhp:Application>\n" + " </mhp:ApplicationList>\n" + " </mhp:ApplicationDiscovery>\n" + "</mhp:ServiceDiscovery>", orgId, serverName); // 将XML内容写入响应 PrintWriter out = response.getWriter(); out.print(xmlContent); out.flush(); } } ``` 说明: - 我们创建了一个Servlet,它响应GET请求。 - 从请求中获取`orgId`参数(如果没有则设为空字符串,实际可能需要错误处理)。 - 使用`request.getServerName()`获取服务器名称。 - 使用`String.format`构建XML字符串,其中`%s`会被替换为实际的`orgId`和`serverName`。 - 设置响应头和内容,并输出。 注意:这种方法在XML内容复杂或需要严格转义时可能会有问题(例如如果`orgId`包含特殊字符,如`<`、`>`、`&`等,会导致XML无效)。因此,更安全的做法是使用XML构建工具。 改进:使用DOM构建XML(避免注入问题) 以下是使用DOM的版本: ```java import java.io.IOException; import java.io.StringWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; import org.w3c.dom.Element; @WebServlet("/ServiceDiscovery") public class ServiceDiscoveryServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("application/vnd.dvb.ait+xml"); response.setHeader("Cache-Control", "max-age=300"); String orgId = request.getParameter("orgId"); if (orgId == null) { orgId = ""; } String serverName = request.getServerName(); try { DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); // 创建根元素 Document doc = docBuilder.newDocument(); Element serviceDiscovery = doc.createElementNS("urn:dvb:mhp:2009", "mhp:ServiceDiscovery"); serviceDiscovery.setAttribute("xmlns:ipi", "urn:dvb:metadata:iptv:sdns:2008-1"); serviceDiscovery.setAttribute("xmlns:tva", "urn:tva:metadata:2005"); serviceDiscovery.setAttribute("xmlns:mpeg7", "urn:tva:mpeg7:2005"); serviceDiscovery.setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance"); serviceDiscovery.setAttribute("xsi:schemaLocation", "urn:dvb:mhp:2009 mis_xmlait.xsd"); doc.appendChild(serviceDiscovery); // 创建ApplicationDiscovery元素 Element applicationDiscovery = doc.createElementNS("urn:dvb:mhp:2009", "mhp:ApplicationDiscovery"); applicationDiscovery.setAttribute("DomainName", "hbbtv.de"); serviceDiscovery.appendChild(applicationDiscovery); // 创建ApplicationList元素 Element applicationList = doc.createElementNS("urn:dvb:mhp:2009", "mhp:ApplicationList"); applicationDiscovery.appendChild(applicationList); // 创建Application元素 Element application = doc.createElementNS("urn:dvb:mhp:2009", "mhp:Application"); applicationList.appendChild(application); // appName Element appName = doc.createElementNS("urn:dvb:mhp:2009", "mhp:appName"); appName.setAttribute("Language", "eng"); appName.setTextContent("org.hbbtv_OPAPP_APP09"); application.appendChild(appName); // applicationIdentifier Element applicationIdentifier = doc.createElementNS("urn:dvb:mhp:2009", "mhp:applicationIdentifier"); application.appendChild(applicationIdentifier); Element orgIdElement = doc.createElementNS("urn:dvb:mhp:2009", "mhp:orgId"); orgIdElement.setTextContent(orgId); applicationIdentifier.appendChild(orgIdElement); Element appId = doc.createElementNS("urn:dvb:mhp:2009", "mhp:appId"); appId.setTextContent("3952"); applicationIdentifier.appendChild(appId); // ... 其他元素的创建类似,为了简洁,这里省略中间部分,只展示关键部分 // 注意:由于XML结构复杂,上面只创建了一部分,下面需要继续创建剩余的元素。但为了示例清晰,我们只展示关键部分,剩余部分可以按照同样方式创建。 // 实际上,上面的代码只构建了部分结构。完整的构建需要按照XML结构逐一创建元素。 // 由于完整构建代码很长,这里只展示关键思路。在实际开发中,可以封装方法或使用JAXB(如果有XSD)。 // 将DOM转换为字符串 TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no"); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); StringWriter writer = new StringWriter(); transformer.transform(new DOMSource(doc), new StreamResult(writer)); String xmlContent = writer.toString(); // 输出响应 PrintWriter out = response.getWriter(); out.print(xmlContent); out.flush(); } catch (ParserConfigurationException | TransformerException e) { throw new ServletException("Error generating XML", e); } } } ``` 注意:上面的DOM构建代码是不完整的,因为完整的构建过程冗长。在实际项目中,如果XML结构复杂且固定,可以考虑使用JAXB(基于注解绑定)或者使用模板引擎(如Freemarker、Thymeleaf)。 考虑到代码长度,我们也可以采用折中方案:使用字符串模板,但对插入的变量进行XML转义。例如: ```java import org.apache.commons.text.StringEscapeUtils; // 然后在使用String.format之前,对orgId进行转义: String escapedOrgId = StringEscapeUtils.escapeXml10(orgId); // 同样对serverName转义 String escapedServerName = StringEscapeUtils.escapeXml10(serverName); // 然后用转义后的字符串构建XML ``` 这样可以在一定程度上避免注入问题。 总结:根据项目的实际需求和复杂度选择合适的方式。如果性能要求高且XML简单,可以使用转义后的字符串格式化;如果XML结构复杂且需要严格保证格式,建议使用DOM或JAXB。 相关问题: </think>在 Java 中解析 PHP 文件通常不是直接执行 PHP 代码,而是提取其中的 XML 模板结构并实现动态内容替换。以下是完整的解决方案: ### 解决方案:使用 Java 实现动态 XML 生成 ```java import java.io.*; import java.util.HashMap; import java.util.Map; import java.util.regex.*; public class PhpTemplateParser { public static void main(String[] args) { // 模拟 PHP 的 $_GET 和 $_SERVER 参数 Map<String, String> getParams = new HashMap<>(); getParams.put("orgId", "12345"); // 示例参数值 Map<String, String> serverParams = new HashMap<>(); serverParams.put("SERVER_NAME", "example.com"); // 示例服务器名称 // 解析 PHP 文件并生成 XML String xmlOutput = parsePhpTemplate("path/to/your/file.php", getParams, serverParams); System.out.println(xmlOutput); } public static String parsePhpTemplate(String filePath, Map<String, String> getParams, Map<String, String> serverParams) { try { // 1. 读取 PHP 文件内容 String phpContent = readFile(filePath); // 2. 提取 XML 模板主体 String xmlTemplate = extractXmlTemplate(phpContent); // 3. 替换动态变量 return replacePlaceholders(xmlTemplate, getParams, serverParams); } catch (IOException e) { throw new RuntimeException("Error reading file", e); } } private static String readFile(String path) throws IOException { StringBuilder content = new StringBuilder(); try (BufferedReader reader = new BufferedReader(new FileReader(path))) { String line; while ((line = reader.readLine()) != null) { content.append(line).append("\n"); } } return content.toString(); } private static String extractXmlTemplate(String phpContent) { // 使用正则定位 XML 输出部分 Pattern pattern = Pattern.compile("echo\\s*'([\\s\\S]*?)'\\s*;", Pattern.DOTALL); Matcher matcher = pattern.matcher(phpContent); if (matcher.find()) { // 清理 PHP 拼接语法并保留 XML 结构 return matcher.group(1) .replace("'. $_GET['orgId'] .'", "{ORG_ID}") .replace("'. $_SERVER['SERVER_NAME'] .'", "{SERVER_NAME}"); } throw new IllegalArgumentException("No XML template found in PHP file"); } private static String replacePlaceholders(String template, Map<String, String> getParams, Map<String, String> serverParams) { // 替换 GET 参数 String result = template.replace("{ORG_ID}", getParams.getOrDefault("orgId", "DEFAULT_ORG")); // 替换 SERVER 参数 return result.replace("{SERVER_NAME}", serverParams.getOrDefault("SERVER_NAME", "localhost")); } } ``` ### 代码解释: 1. **文件读取**: - `readFile()` 方法读取 PHP 文件内容到字符串 2. **XML 模板提取**: - 使用正则表达式 `echo\\s*'([\\s\\S]*?)'\\s*;` 定位 PHP 中的输出语句 - 将 PHP 变量语法 (`'. $_GET[...] .'`) 替换为占位符 `{ORG_ID}` 和 `{SERVER_NAME}` 3. **动态内容替换**: - `replacePlaceholders()` 将占位符替换为实际参数值 - 使用 `Map` 结构模拟 PHP 的 `$_GET` 和 `$_SERVER` 超全局变量 4. **输出生成**: - 最终生成符合 DVB-MHP 标准的 XML 内容 - 包含正确的命名空间声明和动态插入的值 ### 关键注意事项: 1. **正则表达式说明**: - `[\s\S]*?` 匹配任何字符(包括换行)的非贪婪模式 - 转义 PHP 语法中的单引号和分号确保精准定位 2. **动态参数处理**: - 占位符设计避免与 XML 内容冲突 - 提供默认值防止参数缺失导致的空指针 3. **XML 完整性**: - 保留原始的 XML 命名空间声明 - 维持 `xsi:schemaLocation` 等关键属性 4. **安全考虑**: - 对输入参数进行验证和转义(实际使用时建议添加 XML 编码) - 考虑使用 DOM 解析器生成 XML 以避免注入风险 ### 使用示例: ```java // 模拟 HTTP 请求参数 Map<String, String> getParams = new HashMap<>(); getParams.put("orgId", "hbbtv_org"); Map<String, String> serverParams = new HashMap<>(); serverParams.put("SERVER_NAME", "api.hbbtv.de"); // 生成最终 XML String xml = parsePhpTemplate("ait_discovery.php", getParams, serverParams); System.out.println(xml); ``` ### 输出结果示例: ```xml <?xml version="1.0" encoding="utf-8"?> <mhp:ServiceDiscovery xmlns:mhp="urn:dvb:mhp:2009" ...> ... <mhp:orgId>hbbtv_org</mhp:orgId> ... <mhp:URLBase>https://api.hbbtv.de/_TESTSUITE/.../</mhp:URLBase> ... </mhp:ServiceDiscovery> ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值