2009-07-30 265 views
1

我在尝试在我们的某个平台上调用SharePoint的Web服务时出现错误。首先,我们有开发(DEV),测试(QA)和生产(PROD)SharePoint服务器。 QA和PROD服务器几乎完全相同。我们有一个ASP.NET Web服务,它们分别作为一个独立的应用程序。我们的数据输入表单会将Web服务插入/更新到SQL数据库中,并且在某些情况下会调用某些SharePoint Web服务(列表,dws)。SharePoint网络服务“无法连接到远程服务器”

我们在从Web服务的PROD上调用SharePoint的Web服务时遇到问题,但是在QA(或DEV)上没有问题。在我们的Web服务代码中,我们有对SharePoint Web服务(列表和dws)的Web引用。当通过我们的某个表单创建新条目时,我们试图调用这些Web服务来创建列表项目/文件夹。在QA上,创建列表项目/文件夹没有问题。表格填写完毕后,调用我们的Web服务 - 调用SharePoint Web服务并创建列表项目/文件夹。

PROD上,我们得到以下错误,当我们试图调用的SharePoint Web服务:

无法连接到远程服务器

在System.Net.HttpWebRequest.GetRequestStream() 在System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName,Object [] parameters) ...

但是,为了使它更有趣,如果我cal l直接从我的个人计算机执行PROD SharePoint Web服务我无法创建列表项目/文件夹。当我们的Web服务尝试调用PROD SharePoint Web服务时,我们只有这个问题。我们浏览了许多不同的web.config文件,寻找QA和PROD的差异,并且还没有提出任何问题。

如果任何人有任何指针,他们会大大apprecciated。谢谢。

更新:我只是试图重构上述方法来使用SharePoint对象模型API,我得到一个未经授权的错误。当使用对象模型API时,证书似乎没有被正确传递,因为它试图使用MOSS服务器证书。有没有什么办法可以告诉它在使用web服务api时使用哪个凭证?

docLibList.Credentials = System.Net.CredentialCache.DefaultCredentials; 

谢谢。

+0

调用SharePoint Web服务的ASP.NET服务是否位于相同的服务器上(QA和PROD)?如果是这样,为什么不直接用ASP.NET服务调用对象模型呢? – Janie 2009-07-30 17:27:01

回答

0

这可能不是问题,而是您正确指向生产服务器的Web服务的引用。尝试访问被错误引用的SP服务之前,我遇到了问题。我指向的开发服务器位于单独的域中,无法找到。

2

肖恩,

我不知道我完全理解你的调用模式,但如果你确实循环回到Web服务在同一个盒子,你可能会运行到臭名昭著的回送问题:

https://serverfault.com/questions/32345/ie-8-authentication-denied-on-local-sharepoint-site/32485#32485

简而言之:执行基于主机名的HTTP调用,可以阻止发回它们的服务器。如果环回问题在进行中,您可以从另一个盒子的PROD中调用Web服务...但不能从PROD盒子本身调用(即循环返回)。我认为这与你上面描述的行为是一致的。

如果您的环境中的Windows补丁程序级别不同,它可能会解释为什么您的代码在PROD中失败,但在您的其他环境中失败。

我希望这有助于!

0

关于更新您的有关使用对象模型中的未经授权的错误问题:

根据你的代码运行在你有时需要提升权限的上下文。有关详细信息,请参阅此Elevation of Privilege MSDN文章(还请注意最后的社区评论)。还有一个Visual How-To。另一种方法是创建new SPSite object using a SPUserToken object。有更多的信息in this blog post by Daniel Larson。对于系统帐户,这将与代码来完成:

SPSite site = new SPSite(SPContext.Current.Site.ID, 
         SPContext.Current.Site.SystemAccount.UserToken); 

顺便说一句,这将是它自己的问题,下一次更好,所以它可以正确地投票和回答。