2011-09-30 20 views
6

は、対話型F#でこれを実行してみ:F F#ソリューション対インタラクティブ#とWCF

#r "System.ServiceModel" 
#r "System.Runtime.Serialization" 

open System.ServiceModel 

[<ServiceContract>] 
type IWCF = 
    [<OperationContract>] 
    abstract Ping: float -> unit 

type WCF() = 
    interface IWCF with 
    member o.Ping a = printfn "Hello, %g" a 

let svh = new ServiceHost (typeof<WCF>) 

あなたはおそらく成功します。新しいソリューションを作りましょう。

参考:

  • System.Runtime.Serialization
  • System.ServiceModel

Program.fsに次のコードを貼り付けます

open System.ServiceModel 

[<ServiceContract>] 
type IWCF = 
    [<OperationContract>] 
    abstract Ping: float -> unit 

type WCF() = 
    interface IWCF with 
    member o.Ping a = printfn "Hello, %g" a 

let svh = new ServiceHost (typeof<WCF>) 

そして、それを実行します。次のエラーが表示されます。

All parameter names used in operations that make up a service contract must not be null. Parameter name: name

何が問題なのですか。

PS:私は、Visual Studio 2010の究極のSP1

EDITを使用します。念のため、C#の同等は正常に動作します

+0

は、あなたは、.NETランタイムの正しいバージョンをターゲットにしていることを確認するために、チェックを倍増していますか?私が思い出したように、F#コンソールアプリケーションのデフォルトはVS 2010で、.NET 4のクライアントプロファイルです。このプロファイルは、完全な.NETプロファイルではなく、時には「ここでは動作するが、そこにはない」タイプの問題。 – pblasucci

答えて

7

問題は、WCF-オペレーションのパラメータの名前を持つ必要があるという確かです。

ここには名前付きパラメータを取得するための解決策があります(それはaという名前でした) - なぜF#-Interactiveで動作していますか?いいえ、それはそこにパラメータのいくつかの標準的な名前を置くかもしれません。 構文は少し奇妙ですが、あなたがしようと、F#でパラメータの名前を定義することができます。

[<ServiceContract>] 
type IWCF = 
    [<OperationContract>] 
    abstract member Ping: a:float -> unit 

注:あなたがそこにmemberが必要な場合、私は知らないが、私はちょうど私のファイルのいくつかをチェックしましたがそれをそこに入れてください。私はATMの周りにコンパイラがありませんので、本当に必要な場合に備えてそこに座らせてください(しかし私はそうは思わない)

+2

"member"は必須ではありません。 – jhamm

+0

ありがとうございました!インターフェイスメンバのパラメータにも名前を付けることはできません。 –

1

私はこの問題が回答としてマークされているが、同じ例外メッセージまったく違う理由で。私は誰かが私が持っていたのと同じ原因で同じ問題を経験する場合にだけ投稿します。

私の場合は、dotNET_Reactorを使用して、-fileと-targetfileに加えて、'execlude_types 1 -necrobit 1 -mapping_file 1 'というフラグでservice.exeを難読化しました。

私は実際の "理由"を追跡していないが、それはうまくいかなかったが、難読化を取り除くことは助けになった。ビジュアルスタジオからすべてのことが分かっていたのは非常に不満でしたが、同じマシンにアプリケーションをインストールすることはできませんでした(ビルドサーバーによって難読化されていました)。

BjørnarSundsbø