开发者

Gather scatter like operation using WCF and C# (F#)

What is the best way to implement Gather-Scatter like operation using WCF and C# (or F#)?

  1. Lets say that I have 20 nodes (computers) connected by WCF.
  2. Each node computes a time duration value and sends this value to the main node.
  3. The main node takes the minimum value of all the incomming ones and sends this information back to all the nodes.

EDIT:

The resulting code:

open System.ServiceModel
open System.ServiceModel.Channels

let numberOfClients = 10

type IMyContractCallback =
  [<OperationContract>]
  abstract GetDuration: duration: float -> unit

[<ServiceContract(CallbackContract = typeof<IMyContractCallback>)>]
type IMyContract =
    [<OperationContract>]
    abstract SendDuration: duration: float -> unit

[<ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Reentrant)>]
type MyService () =

  let mutable totDuration = 1.
  let callbacks = System.Collections.Generic.Stack ()

  interface IMyContract with
    member o.SendDuration (duration) =
        totDuration <- min totDuration duration
        callbacks.Push (OperationContext.Current.GetCallbackChannel<IMyContractCallback>())
        printfn "N = %d" callbacks.Count
        if callbacks.Count = numberOfClients then
          for c in callbacks do c.GetDuration (totDuration)

  interface IMyContractCallback with
    member o.GetDuration (duration) = printfn "Minimum duration = %g" duration

let address = "net.pipe://localhost/aaa"

let service = MyService ()
let pipe = new NetNamedPipeBinding()

let host = new ServiceHost(servic开发者_如何学Pythone)
host.AddServiceEndpoint(typeof<IMyContract>, pipe, address) |> ignore
host.Open()

for i in 0 .. numberOfClients - 1 do
  let client1 = System.Threading.Thread (fun () ->
    let fact = new DuplexChannelFactory<IMyContract>(new InstanceContext(service), pipe, address)
    let ch = fact.CreateChannel()
    ch.SendDuration (0.4 + float i) )
  client1.Start()


You can easily do this with WCF. Implement a callback on the client nodes that the server will fire after computing the minimum value.

See WCF Callbacks; a beginners guide

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜