SharePoint Web服务“无法连接到远程服务器”

时间:2009-07-30 17:15:52

标签: web-services sharepoint

尝试在我们的某个平台上调用SharePoint的Web服务时出现错误。首先,我们有开发(DEV),测试(QA)和生产(PROD)SharePoint服务器。 QA和PROD服务器完全相同。我们有一个ASP.NET Web服务,它作为每个应用程序的独立应用程序。我们的数据输入表单访问Web服务以插入/更新到SQL数据库,并在某些情况下调用一些SharePoints Web服务(列表,dws)。

我们无法通过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 []参数) ...

但是,为了使它更有趣,如果我直接从我的个人计算机调用PROD SharePoint Web服务,我就可以创建列表项/文件夹。当我们的Web服务尝试调用PROD SharePoint Web服务时,我们才遇到问题。我们查看了许多不同的web.config文件,寻找QA和PROD的差异,但尚未提出任何建议。

如果有人有任何指示,他们会受到极大的谴责。感谢。

更新:我刚刚尝试重构上述方法以使用SharePoint对象模型API,而且我收到了未经授权的错误。使用对象模型API时,凭据似乎没有正确传递,因为它正在尝试使用MOSS服务器凭据。有没有办法告诉它使用哪些凭据与web服务api一样?

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

感谢。

3 个答案:

答案 0 :(得分:2)

肖恩,

我不确定我是否完全理解您的调用模式,但是如果您确实在同一个框中循环回Web服务,那么您可能会遇到臭名昭着的环回问题:

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

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

如果您的环境之间的Windows修补程序级别不同,它可能会解释您的代码在PROD中失败但在其他环境中失败的原因。

我希望这有帮助!

答案 1 :(得分:0)

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

答案 2 :(得分: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); 

顺便说一下,下次这个问题会更好,这样才能正确投票和回答。