6

これは私のサービス生成クラスです:

public partial class MyClass : object, 
                               System.Runtime.Serialization.IExtensibleDataObject, 
                               System.ComponentModel.INotifyPropertyChanged 
{ }

私は自分のサービスを利用しています。でMyClassオーバーライドToString()しましたが、クライアントにありません。私はそれを生成したいのですか、それともMyClass部分的に自分自身をオーバーライドすることができますToStringか?

生成された.csファイルに書き込めることを知っています。それを行うための最良の方法は何ですか、そして私はそれを行うべきですか?

4

2 に答える 2

6

クライアントとサービスの両方を定義している場合は、WSDL生成クラスを使用する必要はありません。共有オブジェクトを別のアセンブリに移動し、クライアントプロジェクトとサーバープロジェクトの両方から参照します。サービス参照を作成するとき、新しいクラスを生成する代わりに、WSDLからの既知のクラスを再利用する「高度な」オプション(デフォルトでオンになっていると思います)があります。

さらに良いことに、サービスコントラクトを共有ライブラリに移動する場合は、サービス参照を作成する必要もありません。ChannelFactory直接呼び出すだけで、自動生成されたプロキシクラス全体を削除できます。

私のブログでこれらの両方を行う方法のデモンストレーションがあります:http://blog.kutulu.org/2012/03/proxy-free-wcf-ditching-proxy.html

サービスからWSDLを絶対に使用する必要がある場合(たとえば、サービス側を制御できず、変更される可能性がある場合)、VSが作成する部分クラスを拡張できます(提案したとおり)。最近VSから取得するほとんどの自動生成クラスは、この種の拡張を可能にするための部分的なクラスです。もちろん、欠点は、クライアントとサーバーの追加の部分クラスメソッドが同じであることを保証するものがないことです。私は間違いなくこれを最後の手段と考えています。

于 2012-06-01T12:38:27.940 に答える
3

オーバーライドされたメソッドがクライアントプロジェクトとサーバープロジェクト間で存在するdllを共有する場合は、そのメソッドを使用できます。デフォルトでは、WCFはサービスインターフェイスで宣言されたプロパティのみを使用して各クラスを生成します。メソッドは生成されません。

別のdllファイルを作成し、サービスとクライアント間で共有したいものをこのdllに入れることができます。このdllを、クライアントプロジェクトとサービスプロジェクトの両方への参照として追加します。デフォルトでは、プロキシを生成するときに、共有クラスは自動生成されません。

于 2012-06-01T12:35:42.753 に答える