2009-02-04 164 views
4

我通过Silverlight访问SharePoint Web服务时遇到问题。通过Silverlight访问SharePoint Web服务

尝试向URI 'http://sample:8000/_vti_bin/Authentication.asmx'发出错误。 这可能是由于尝试以 以跨域方式访问服务 而没有适当的跨域策略 或者是不适合SOAP服务的 策略。您可能需要 联系 服务的所有者以发布跨域 策略文件,并确保它允许 发送与SOAP相关的HTTP标头。 请参阅 的内部例外更多详情。

一些问题:

  1. 如何正确部署了SharePoint设计clientaccesspolicy.xml?只需在设计师中打开网站,添加文件然后发布?
  2. clientaccesspolicy.xml应该部署的站点使用表单身份验证。我无法使用Sharepoint Designer在那里发布。因此,我为此网站创建了新的区域,该区域使用Windows身份验证并在那里发布了clientaccesspolicy.xml。两者使用相同的内容数据库,没有?
  3. 如果clientaccesspolicy.xml将被发布,我如何允许匿名访问此文件?

问候 安东Kalcik

+0

的所有内容我是不是能够匿名访问的文件。我所做的是我创建了“启用Silverlight的WCF服务”,它充当Silverlight应用程序和SharePoint Web服务之间的代理。 – 2009-02-08 20:24:38

回答

1

这里回答了我的问题1和2:

  1. 在你打开该网站在SharePoint Designer中:文件 - >打开网站 - >在文本字段“网站名称:”您网站的类型网址。拖动&将clientaccesspolicy.xml拖放到您网站的根目录中。
  2. 如果你有表单身份验证,你不需要这一步创建新的区域(但由于某些原因它可能是有用的)。您只需打开Web浏览器并键入您的网站的URL。然后填写文本字段(始终使用具有管理员权限的用户)并选中“自动登录”。之后,Sharepoint设计人员将此凭据用于指定的URL。

如果你可以帮我解答Nr。 3,或者您有其他解决方案,我如何从Silverlight访问clientaccesspolicy.xml,发布它!

+0

而是使用评论功能(我认为它只在某个级别可用)或使用编辑功能来更新您的帖子。不要在你自己的问题上发表答案,除非这是答案。 – 2009-02-04 13:07:24

+0

第1点和第2点是我的问题的答案。 – 2009-02-04 13:25:42

0
  1. 这很好。
  2. 它应该是,只要你没有设置一个全新的网站。
  3. 它不应该是一个安全风险。如果您需要通过WindowsAuth对服务进行身份验证,那么您应该为clientaccesspolicy.xml进行身份验证。
+0

为什么允许匿名访问clientaccesspolicy.xml或crossdomain.xml存在安全风险?亚马逊也这样做:http://www.amazon.com/crossdomain.xml。你能否给我提供一个示例,在Silverlight运行时访问此文件之前,我如何进行身份验证? – 2009-02-04 13:23:00

+0

第1部分:由于您要删除部分网站的安全性,因此存在安全风险。如果有人能够替换该文件,他们可能会造成各种损害。 – 2009-02-04 15:11:22

0

请记住,clientaccesspolicy.xml必须位于域根。在你的例子中,它将不得不从http://sample:8000/clientaccesspolicy.xml。如果您无法通过该URL在浏览器中打开它,则Silverlight客户端也无法找到它。

将文件放在正确位置的最简单方法是通过FTP或浏览器将其复制到那里。该文件应该可供匿名用户使用(当然,只读)。

1

我们处理这个项目的方式是使用HTTP处理程序。我们将clientaccesspolicy.xml文件放入_layouts目录(通过SharePoint站点共享),使用一个功能(您也可以手动将其复制到该目录中)。

然后我们将HTTP处理程序添加到web.config处理程序部分。在我们的处理程序,我们检查,看看是否该请求是/clientaccesspolicy.xml如果是这样,我们重写路径:

if (path.ToLowerInvariant() == "/clientaccesspolicy.xml") 
{ 
    HttpContext.Current.RewritePath("/_layouts/clientaccesspolicy.xml"); 
} 

我不知道这是否会绕过安全,所以可能无法完全解决您的问题。但至少它给了你一个访问这个文件的方法。

0

我觉得实现的SharePoint的HttpHandler更多realeable方式:返回clientaccesspolicy.xml自己

 public void ProcessRequest(HttpContext context) { 
     if (context.Request.Path.ToLowerInvariant() == "/clientaccesspolicy.xml")   { 
      context.Response.Write(@"<?xml version='1.0' encoding='utf-8' ?><access-policy><cross-domain-access> "+ 
      @"<policy> <allow-from http-request-headers='*'> <domain uri='*' /> </allow-from> <grant-to> "+ 
      @"<resource path='/' include-subpaths='true' /> </grant-to> </policy> "+ 
      @"</cross-domain-access> </access-policy>"); 
     } 
    }