[英]How can I use web service from Silverlight app?
我正在尝试从Silverlight应用程序中的Web服务获取数据。 不幸的是,当尝试连接时,silverlight应用程序(必应地图应用程序)只是挂起了。
我在控制台应用程序中使用了相同的代码,并且效果很好。
为了使它正常工作,我需要在Silverlight中做些特别的事情吗? 我没有任何例外-它只是挂起。
我基于此示例http://www.switchonthecode.com/tutorials/wcf-tutorial-basic-interprocess-communication建立了我的服务和客户端代码
问题与疑问:
1.为什么我不能在sliverlight代码中设置断点?
2.如何从Silverlight应用程序成功调用WCF服务? (链接到SIMPLE工作示例将非常有用-我似乎发现的所有示例似乎都相当先进(RIA,Duplex等),其中许多还显示了xml和其他非C#“代码”-坦率地说,我不知道这些行为以及它们与项目,代码和服务的关系。
(显然,我对WCF和Silverlight不太了解)
根据代码要求:
[ServiceContract]
public interface ILGSMapServer
{
[OperationContract]
List<double> GetLatitudes();
}
public class TreeWorkClient
{
ChannelFactory<ILGSMapServer> httpServer;
public ILGSMapServer httpProxy;
public TreeWorkClient()
{
httpServer = new ChannelFactory<ILGSMapServer>(new BasicHttpBinding(), new EndpointAddress("http://localhost:8000/GetLatitudes"));
httpProxy = httpServer.CreateChannel();
}
public List<TreeWorkItem> GetLocations()
{
List<double> lats = httpProxy.GetLatitudes();
//... do stuff in code
return ret;
}
}
我同意约翰·桑德斯(John Saunders)的观点-如果发布了客户端代码,回答这个问题会更容易。
但是,作为猜测,从Silverlight应用程序调用服务的常见问题是Silverlight对跨域调用施加的限制。
总之,如果您的服务位于与Silverlight应用程序的起源站点不同的域中,则需要在服务位置创建客户端访问策略文件。
详情请参见:
http://msdn.microsoft.com/zh-CN/library/cc197955(v=vs.95).aspx
给定您的示例代码,您应该会看到
System.InvalidOperationException:合同“ ILGSMapServer”包含同步操作,Silverlight不支持该同步操作。 将操作分为“开始”和“结束”部分,并将OperationContractAttribute的AsyncPattern属性设置为“ true”。 请注意,您不必在服务器上进行相同的更改。
您需要将服务合同更改为以下内容
[ServiceContract]
public interface ILGSMapServer {
[OperationContract( AsyncPattern = true )]
IAsyncResult BeginGetLatitudes( AsyncCallback callback, object context );
List<double> EndGetLatitudes( IAsyncResult result );
}
这也意味着您将需要在GetLocations()函数中做一些完全不同的事情,因为此函数将在返回Web结果之前返回。
尝试看一下这里的例子。
其他选项涉及使用“添加服务引用”,而不是在代码中手动定义它。
我相信您需要在WCF服务上具有此属性,SL才能使用它:
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
至于调试-您可以调试Silverlight,为此,请尝试使用IE,它是最自然的SL调试浏览器(可悲)。
一旦开始调试,当您捕获跨域异常或其他异常时,将会更清楚地发现出了什么问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.