2008-10-30 180 views
3

我创建了一个在32位模式下运行的批处理作业,因为它使用32位COM对象,这需要连接到SharePoint以更新列表。 它在我的开发环境中工作,因为它是完整的32位。但在我的测试和脾淋巴细胞的环境,我们使用64位的SharePoint,这是我从获得的SPSite:使用SPSite从32位应用程序访问64位SharePoint

System.IO.FileNotFoundException: 
    The Web application at http://<my sp host>/ could not be found. 
    Verify that you have typed the URL correctly. 
    If the URL should be serving existing content, the system administrator may need to add a new request URL mapping to the intended application. 

at Microsoft.SharePoint.SPSite..ctor(SPFarm farm, Uri req... 

这是我做的

 using (SPSite site = new SPSite(_url)) 
     { 
      using (SPWeb web = site.OpenWeb()) 
      { 
       try 
       { 
        SPList list = web.Lists[new Guid(_listID)]; 
        SPListItem item = list.GetItemById(id); 
        item[field] = value; 
        item.SystemUpdate(false); 
       } 
       catch (Exception x) 
       { 
        log.Error(x); 
       } 
      } 
     } 
+0

我的解决方法是为我的32位COM对象创建一个webservice包装,让我的批处理jobb运行64位。 – walming 2008-11-05 12:29:57

回答

1

我不认为这是一个32位/ 64位问题就像我在32位上开发和部署到64位一样。 (实际上,我们正在运行一个32位和64位WFE)

由于从SPSite构造函数抛出异常,因此我会进一步调查您正在运行代码的机器(SP盒)是否实际识别该网址。

+1

如果我将应用程序编译为64位,并且只是尝试SPSite代码,所有代码都很好。所以它与64位SharePoint不允许来自32位的呼叫有关。 我可以使用web服务进行列表更新,但它总是创建一个新版本的listitem,我需要该项目具有相同的版本 – walming 2008-10-30 20:13:12

6

您只需要在64位进程中运行批处理作业。问题在于SharePoint的许多COM对象都是在测试和生产环境中为64位编译的。 SPSite和SPWeb对象实际上包装了COM对象,这就是它们在32位进程中失败的原因。

一种解决方法可能是通过其Web服务而不是对象模型与SharePoint进行交互。

+0

我需要它运行在32位模式,因为我使用其他COM对象只能在32位模式下工作不是一种选择。 使用SharePoint webservice不工作,因为我需要做一个SystemUpdate,所以该项目不会得到一个新的版本。 – walming 2008-11-05 12:27:59

相关问题