是否有必要更改WCF服务的服务合同(Begin <operation>和End <operation>)以使其可供Silverlight使用?</operation> </operation>

时间:2009-09-24 16:53:59

标签: wcf silverlight

我的团队拥有WCF服务和将使用它的Silverlight 3.0应用程序。

我们不希望使用svcutil来生成代理,因为它增加了开发过程的复杂性。我们之前一直走在那条路上,我们不再这样做了。

我在WinForms应用程序上成功使用了ChannelFactory,我想在这个项目上再次使用它。困难似乎是Silverlight期望WCF服务本身的Begin ...和End ...方法。我可以理解Silverlight可能想要在工作线程上异步调用,但为什么我的服务合同必须更改才能支持这个呢?

我觉得我在这里缺少一些重要的东西,但这对我来说并不明显是什么。

是否真的有必要更改WCF服务的服务合同,以便Silverlight应用程序可以使用它?

3 个答案:

答案 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