5

2 つの Web サービスがあります。1 つはユーザー機能を備え、もう 1 つは管理機能を備えています。

どちらのサービスも同じオブジェクト タイプで効果的に機能します。たとえば、次のようになります。

  • AdminService は、Customer オブジェクトを削除/変更する機能を提供します
  • UserService は、Customer オブジェクトを一覧表示/読み取るための機能を提供します

クライアントには、Webservices.Admin と Webservices.User という 2 つのサービス参照があります。

UserService を使用して Customer オブジェクトを取得する場合、UserService は Webservices.User.Customer 型のオブジェクトを取得するため、AdminService を介してそれらを操作することはできませんが、AdminService は Webservices.Admin.Customer 型のオブジェクトを処理します。

サーバー側では、両方の型が同一であり、クライアントの異なる名前空間に属しているだけです。

ここでの質問: 異なるサービス参照間で型を共有するにはどうすればよいですか?

4

4 に答える 4

2

https://github.com/geersch/WcfSvcMapを確認してください。 Reference.svcmap ファイルを微調整することで、異なるサービス参照で使用される DataContract ごとに 1 つのクラスのみが生成されるようにすることができます。

注: 「サービス参照の更新」を押す前に、ノードのコンテンツを削除することを忘れないでください。

于 2011-09-27T07:39:00.120 に答える
1

slsvcutil を使用してクライアント側に WCF プロキシを作成し (クライアント側が .net アプリケーションであると仮定)、オブジェクトを含む DLL を参照すると、DLL で同じオブジェクトを渡すすべてのエンドポイントに使用されます。

[スタート] -> [Visual Studio 2008] -> [ツール] -> [Visual Command Prompt] から Visual Studio コマンド プロンプトを開きます。

次のようなディレクトリに移動

C:\Program Files\Microsoft SDKs\Silverlight\v3.0\Tools

slsvcutil と入力し、構文に従ってください

slsvcutil http://somewcfservice:8080 /r:CommonLibrary.dll

CommonLibrary.dll は、ビジネス オブジェクトを含む dll です。

[編集] プロジェクトが Silverlight プロジェクトであるという事実を修正

于 2010-01-10T15:36:34.663 に答える
1

通信の両端を制御しており、両端が .NET のみの場合は、次のようにすることができます。

  • データ コントラクトを含むすべてのコントラクトを別の「コントラクト」アセンブリに入れます。
  • サーバー側の実装コードとクライアント側のコードの両方でそのアセンブリを参照します

これを行うと、サービス参照を追加するときに、WCF はその共有アセンブリを見つけて使用し、エンティティの新しい型を作成しません。あなたの場合、あなたContracts.Customerが扱っているものは1つしかありません。

これは、ワイヤの両端を制御し、両端に .NET がある場合にのみ機能します。しかし、その場合、コントラクト (特にデータ コントラクト) をサーバーと任意の数のクライアントの両方で共有するのに最適な方法です。

于 2010-01-10T15:11:50.423 に答える
0

サービス参照を追加する前に共有型アセンブリへの参照をクライアントに追加するだけで、クライアントとサービス間で型を共有する簡単な方法があります。

詳細なシナリオとサンプル プロジェクトは次の場所にあります。

http://blog.walteralmeida.com/2010/08/wcf-tips-and-tricks-share-types-between-server-and-client.html

于 2010-08-19T08:37:48.387 に答える