1

以前にこの質問を見たことがありますが (ここでは 1 つ)、解決策は、参照されているアセンブリを再利用しないことです。複数のサービスが同じ共有オブジェクトを参照するため、含まれているアセンブリを再利用する必要があります。アセンブリを再利用しないと、同じオブジェクトが異なる名前空間を介して参照されるため、名前空間エラーが発生します。(つまり、Service1.Object、Service2.Object)

つまり、Web サービスの ClientBase を拡張する生成された Client クラスが必要ですが、同じ名前空間を持つ共有オブジェクトが必要なため、再利用参照アセンブリのチェックを外すことができません。助言がありますか?

4

2 に答える 2

1

svcutil.exeを使用してクライアント プロキシを生成し、 /rスイッチを使用して、自動生成されたクライアント プロキシ コードで再発行する代わりに参照するアセンブリを指定できます。

  • ProjACommon
  • ProjBSvc
    • 参照 ProjACommon
  • ProjCClient
    • 参照 ProjACommon
    • C 内の新しい名前空間に自動生成されるのではなく、ProjA の型やコードを参照するクライアントが必要な場合

ProjBSvc exec をビルドした後、.wsdl と .xsd を出力する次のコマンドを実行します。

svcutil.exe ProjBSvc.dll

2番目にwsdlとxsdを使用してプロキシ/クライアントを生成します:

svcutil.exe *.wsdl *.xsd /o:<ProjCClientPath>/Client.cs /r:ProjACommon.dll

ProjCClient は、前の手順で生成された Client.cs を参照します

オブジェクト ブラウザーでビルドして調べると、C の名前空間にある同じ名前の新しい型ではなく、A の型を参照している C の型が表示されます。/tcv必要に応じて、他のスイッチと/n同様に必要になる場合があります。

ここに役立つかもしれない記事があります。また、svcutil に関する Microsoft ドキュメントへのリンクもあります。

于 2013-04-19T15:38:39.683 に答える
0

マッパーを使用します。つまり、モデル (オブジェクト) を複製し、ある名前空間から次の名前空間にオブジェクトをマップするクラスを用意する必要があります。

于 2013-04-19T15:39:03.327 に答える