我的团队拥有WCF服务和将使用它的Silverlight 3.0应用程序。
我们不希望使用svcutil来生成代理,因为它增加了开发过程的复杂性。我们之前一直走在那条路上,我们不再这样做了。
我在WinForms应用程序上成功使用了ChannelFactory,我想在这个项目上再次使用它。困难似乎是Silverlight期望WCF服务本身的Begin ...和End ...方法。我可以理解Silverlight可能想要在工作线程上异步调用,但为什么我的服务合同必须更改才能支持这个呢?
我觉得我在这里缺少一些重要的东西,但这对我来说并不明显是什么。
是否真的有必要更改WCF服务的服务合同,以便Silverlight应用程序可以使用它?
答案 0 :(得分:1)
嗯,你需要界面上的'开始'和'结束'方法,这样你就可以调用。
也就是说,sync v async是一个'本地'的东西,你可以让服务器有同步合同(用于实现),客户端具有等效的异步合同(对于Silverlight)。这意味着两个不同的接口(或者同一个接口的两个副本,只是在AsyncPattern = true中有所不同,如果您这样想的话)。但基本上它只是投射到两个不同的CLR接口中的相同“契约”,为供应/消费提供两种不同的编程模型。
(这有'帮助'吗?)
(见例如
http://blogs.msdn.com/mjm/archive/2005/05/04/414793.aspx
以两个描述完全相同的合同的CLR接口开始,但为该合同提供两种不同的编程模型。)
答案 1 :(得分:1)
虽然我正在为当前项目使用生成的代理,但如果我要创建自己的代理,我发现这个文档很有帮助:
Understanding WCF Services In Silverlight 2
您不需要更改Silverlight使用的WCF服务的服务合同。
答案 2 :(得分:0)
为了让Silverlight UI保持响应,有一个设计决定,Silverlight应该只支持异步调用。
如果没有svcutil使用WCF,请查看此视频:http://www.dnrtv.com/default.aspx?showNum=122