我在使用Silverlight访问SharePoint Webservice时遇到问题。
尝试向URI发出请求时发生错误 'http://sample:8000/_vti_bin/Authentication.asmx'。 这可能是由于尝试 以跨域方式访问服务 没有适当的跨域政策 到位,或政策 不适合SOAP服务。你可以 需要联系的所有者 服务以发布跨域 策略文件并确保它允许 要发送的与SOAP相关的HTTP标头。 请查看内部异常 更多细节。
有些问题:
此致 安东卡尔奇克
答案 0 :(得分:1)
这里回答我的问题1.和2。:
如果你可以帮我提问Nr。 3,或者你有其他解决方案,如何从Silverlight访问clientaccesspolicy.xml,发布它!
答案 1 :(得分:1)
我们在项目中处理此问题的方法是使用HTTP Handler。我们使用一个功能将clientaccesspolicy.xml文件放在_layouts目录(在sharepoint站点之间共享)(您也可以手动将其复制到那里)。
然后我们将HTTP处理程序添加到web.config处理程序部分。在我们的处理程序中,我们检查请求是否是针对/clientaccesspolicy.xml的,如果是,我们重写路径:
if (path.ToLowerInvariant() == "/clientaccesspolicy.xml")
{
HttpContext.Current.RewritePath("/_layouts/clientaccesspolicy.xml");
}
我不确定这是否会绕过安全性,因此可能无法完全解决您的问题。但至少它为您提供了一种访问此文件的方法。
答案 2 :(得分:0)
答案 3 :(得分:0)
请记住,clientaccesspolicy.xml必须位于域根目录。在您的示例中,它必须来自http://sample:8000/clientaccesspolicy.xml。如果您无法通过该URL在浏览器中打开它,您的Silverlight客户端也无法找到它。
将文件放在正确位置的最简单方法是通过FTP或资源管理器将其复制到那里。该文件应该可供匿名用户使用(当然只读)。
答案 4 :(得分:0)
我找到更多可实现的方法来实现sharepoint httpHandler:它返回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>");
}
}