c# - Silverlight F# 库和 WCF

标签 c# .net silverlight wcf f#

我有一个 WCF 服务(可能是多个服务)和一个 Silverlight(C#) 客户端。正如我在网络上的某个地方读到的那样,F# 非常适合异步和并行编程。我想尝试 F# 并编写一个库来与给定的 WCF 服务通信,处理它的错误并返回结果。
除了学习新语言和函数式编程之外,这样做还有什么好处吗?

最佳答案

是的,我认为 F# 在这种情况下对于异步编程非常有用。如果您想正确编写异步代码,您需要使用 BeginFoo/EndFoo 方法,或者您需要使用基于事件的 API 来避免在执行某些操作时阻塞 UI 线程异步调用。因此,您不能以通常的顺序风格编写代码 - 只能通过一个接一个地执行操作。相反,您需要将所有内容包装在包含单独异常处理的回调中。

在 F# 中,您可以使用隐藏所有“回调”并自动将所有内容包装在异常处理程序中的异步工作流。因此,您可以将执行多个调用的异步代码编写为顺序代码,并使用所有常用的控制流结构(例如 tryforwhile,...)。你可以这样写:

let processData(userInputs) = async { 
  try
    let! temp = Service.AsyncDoSomething(userInputs)
    let! res = Service.AsyncDoSomethingElse(temp)
    return res
  with e ->
    // Handle exception

这会异步调用 DoSomething 操作,并将函数的其余部分移动到一个回调中,该回调在操作完成时执行(对于 DoSomethingElse 也是如此)。然而,异常处理可以用通常的方式编写。该功能也非常适合编写一些用户界面交互(例如参见 this SO post 或我的 F# talk at London User Group 的记录)

在这个项目中使用 F# 的缺点是它不直接支持 WCF。您当然可以使用它,但您必须编写 C# 样式的可变类,这看起来不太好——一个不错的选择可能是使用 C# 库并在那里定义通常必要的 WCF 内容(然后只需使用它来自 F#)。

关于c# - Silverlight F# 库和 WCF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5054253/

相关文章:

C# Pdf 到带有图像占位符的文本

c# - 重定向到 POST HttpWebRequest

c# - 无法在现有页面中使用挖空模板

.net - 具有 LIKE 和 IN 条件的参数化查询

.net - Microsoft 同步框架与 WCF

silverlight - 从 Windows Phone 中的音频插孔接收数据

javascript - 如何通过来自 Silverlight 的 CRM2011 上的 javascript 连接到保存方法

c# - XAML 找不到转换器类

c# - 如何存储/检索 RSA 公钥/私钥

silverlight - window 电话 : AppBar icons appearing differently on the device