2009-08-14 19 views
2

私はWCFサービスとして外部に公開したいクラスライブラリを持っています。私のクラスには、抽象クラス、普通クラス、列挙体などが含まれています。クラスライブラリをWCFサービスとして公開

私のクラスライブラリの "サービス参照"をプロジェクトで作成して使用することができます。

これはどのように達成できますか?

+0

...あなたの質問は何ですか? –

+0

@All:これは本当の質問だと思いますが、ちょっと混乱します。OPは、彼のクラスライブラリを公開することは、彼のクライアントにクラスライブラリのコピーを与えるのと同じ効果を持つと信じているようだ。しかし、彼は以前に "Add Service Reference"を使っていて、それがそれを達成しないと思っています。彼は何が間違っていたのか知​​りたい。 –

答えて

2

あなたはまだこれを終了していない場合は、起動しないことで、大きなミスから身を保存することができます。

クラスライブラリはクラスライブラリとして設計されています。サービスはサービスとなるように設計されています。彼らは目的が異なる2つの異なるものです。

たとえば、列挙型、およびその列挙型のプロパティを持つEventArgs派生クラス、およびそのEventArgs型を取るイベントハンドラデリゲートを定義している可能性があります。また、1つ以上のクラスが公開されている可能性がありますそのデリゲート型を使用するイベント。

サービスで公開されることはありません。

代わりに、の機能が公開されるようにサービスを設計することをお勧めします。これを行うために、サービスはもちろん、あなたのクラスライブラリを使用します。

クラスライブラリとサービスの違いは、サービスがプラットフォーム間で使用できるように設計されていることです。 Javaクライアントがサービスを使用するときに何が起こるかを考えてください。サービスによって公開される操作に対応するプロキシクラスがあります。これらのプロキシメソッドには、プリミティブ型のパラメータと、サービスとの間でやり取りされるデータの構造に一致するプロキシ型のパラメータがあります。

Javaクライアントは、明らかに、サーバー側の操作で使用されているのと同じ.NETタイプを使用しません。

.NETクライアントを作成するデフォルトの方法は、プロキシクラスを使用して全く同じ方法で動作します。あなたの質問は、クラスライブラリを公開すると実際のクラスをクライアントにエクスポートすることを期待していることを示唆しています。そうではありません。クライアントがサーバーで使用されている正確な.NETクラスに結合する場合、クライアントは通常のクラスライブラリを使用していたかのように、サーバー側アセンブリを持つ必要があります。

+0

ありがとう、これは間違いなく理にかなっています。 – Bhaskar

+0

私は3年遅れていることを知っていますが、うまくいけばこのメッセージが表示されます。すべてのPOCOタイプの動作を実行するためにアセンブリにサービスをアタッチする場合は、同様のオブジェクトをクライアントに送り返して消費する方法を教えてください。インターフェイス内のアトリビュートのみのオブジェクトを軽く作成し、前後に渡して変更します。それとも、他の練習がありますか?私はこのような状況で立ち往生しています。ここでは、サービスに必要なもののためにライブラリを使用する必要があります。私はここで何らかのベストプラクティスを探しています。 – Sinaesthetic

+0

@Sinaesthetic:あなたは質問をする必要があります。これはQ&Aサイトであり、ディスカッションフォーラムではありません。 –

1

クラスと列挙型はWCFで公開できます。ただし、抽象クラスは問題になりますが、サービスとして公開することは意味がありません。列挙型の

、あなたが例えば、[EnumMember]属性を追加する必要があります:

public enum Sex 
{ 
    [EnumMember] 
    Unknown, 
    [EnumMember] 
    Male, 
    [EnumMember] 
    Female 
} 

WCFの全体の主題は、しかし、ここですべてをカバーするには少し広すぎます。何が起こるかを見てください。問題が発生した場合は、さらに具体的な質問をしてください。

+0

bindinfメソッドは、wsHttpBindingまたはnrtTcpBindingになります。いくつかのリンクを用意してください – Bhaskar

関連する問題