F #을 사용하여 두 개의 오랜 시간 F # 프로세스를 실행하는 간단한 일대일 통신을 만들고 싶습니다. 그들은 정기적으로 정보를 교환 할 것입니다. 5 초. 지금까지이 시점에 이르렀습니다.WCF와 F를 사용하는 프로세스 간 통신 #
#r "System.ServiceModel"
#r "System.Runtime.Serialization"
//#r @"d:\DLL\Protobuf\protobuf-net.dll"
#time "on"
open System.ServiceModel
[<ServiceContract>]
type IService =
[<OperationContract>]
// [<ProtoBuf.ServiceModel.ProtoBehavior>]
abstract Test: float [] [] [] -> string
type Service() =
interface IService with
member o.Test data = sprintf "Hello, %A" data
let server = System.Threading.Thread (fun() ->
let svh = new ServiceHost (typeof<Service>)
svh.AddServiceEndpoint (typeof<IService>, NetNamedPipeBinding(), "net.pipe://localhost/123") |> ignore
svh.Open())
server.IsBackground <- true
server.Start()
let scf: IService = ChannelFactory.CreateChannel (NetNamedPipeBinding(), EndpointAddress "net.pipe://localhost/123")
let rnd = System.Random()
let arr =
Array.init 100 (fun i ->
Array.init 10 (fun j ->
Array.init 10 (fun k ->
rnd.NextDouble()
)))
printfn "%s" (scf.Test arr)
주로 다른 WCF 보안 제한으로 인해 많은 예외가 발생합니다.
내 질문은 그것이 작동되도록하는 나는 최소한 어떻게해야합니까
- 은?
- 가능한 한 빨리 의사 소통을하기 위해 코드를 올바르게 작성 했습니까?
- 필자는 ProtoBuf serializer (코드에서 ProtoBehavior 참조)를 포함시켜 직렬화를 더욱 빠르게 만들려고했습니다. 올바르게 구현 했습니까? WCF가 실제로 사용하는지 여부를 어떻게 알 수 있습니까?
멋진 한 친구를! – Nikos