2009-01-20 117 views
1

我正在通过他创建的一些Web服务(主要涉及LINQ to SQL)访问SQL Server(2008 Express)的网站上使用另一个编码器,UI是在Silverlight中。我一直在研究系统的另一部分,但刚刚得到他最新的代码,并试图在我的机器上运行它,但遇到了错误。CommunicationException从Silverlight应用程序调用的Web服务的异步回调

这是在reference.cs文件中的一个行的CommunicationException,该Web服务的EndXXX方法:

// This is for a Ping method we created just to trouble shoot- it behaves the same. 
public string EndPing(System.IAsyncResult result) { 

    object[] _args = new object[0]; 

    // Next line throws Communication Exception 
    string _result = ((string)(base.EndInvoke("Ping", _args, result))); 
    return _result; 
} 

的错误信息是:试图让

“时发生错误对URI'http://localhost:1233/SummitService.svc'的请求,这可能是因为尝试以跨域方式访问服务而没有适当的跨域策略或者不适合SOAP服务的策略您可能需要联系该服务的所有者发布跨域策略文件并确保它允许发送与SOAP相关的HTTP头。 “

整个堆栈在我的本地机器上,所以我不应该需要进行任何跨域调用。我们查看了所有可以找到的配置代码(web .config,ServiceReferences.ClientConfig),将所有对他的机器的引用都改为我的。对于所有这些技术我们都很新,所以我们已经运行到了我们的知识末端。钟声任何人?


UPDATE

所以我做了一些故障排除,发现如果我输入启动整个事件的aspx页面的localhost地址,它会正常加载,并且我在页面上看到来自webservice的数据。只有当我调试时,我得到这个错误。

我还注意到,当我尝试和调试页面时,它正在将文件位置 - D:\ projects \ etc - 加载到浏览器中,而不是通过本地主机。它实际上是加载项目中的.html测试页面,即使我已经将.aspx页面设置为起始页面。

所以它看起来与项目设置或VS2008设置有关,而不是像我第一次假设的配置问题。有没有人有任何其他建议?

回答

1

好的,所以我觉得有点傻。

在我连续几天反对这件事情之后,我发现我已经将Silverlight项目设置为启动项目。我需要它是实际上具有用于连接到数据库的适当身份验证设置的Web项目 - 更不用说实际的主机.aspx页面,我一直将其设置为起始页面,并且想知道为什么它没有被使用。

只要我设置正确的项目。一切都很美丽。

0

这个问题可能与LINQ序列化查询结果的方式有关。如果它检测到表之间的关系,那么它将它们与服务中的数据一起发送给它们,但由于Silverlight被沙箱化,它不能接受任何“分支”数据。

在LINQ设计器中,尝试将序列化模式更改为单向并查看是否有效。

+0

感谢您的建议。我试过了,但没有运气。说实话,虽然我提供了所有用于完整性的技术,但“Ping”Web服务(它只是返回一个字符串文本)具有相同的问题,这让我认为这对服务来说很简单。希望我知道什么! – TwainJ 2009-01-22 19:08:52

0

我想在你测试web项目的地方添加silverlight项目,你已经定义了每次创建项目时创建一个测试页面。首先取消选中该选项。