2013-01-16 15 views
6

2つのエンドポイントを持つWCFサービスへの参照が追加されました。名前と契約のあるエンドポイント要素を見つけることができません

<client> 
    <endpoint name="ABCServiceV1" address="http://staging.ABCwebservices.com/ABC/Service.svc" 
    binding="basicHttpBinding" bindingConfiguration="ABCServiceV1" 
    contract="ABCService.IService" /> 
    <endpoint name="ABCServiceV2" address="http://staging.ABCwebservices.com/ABC/Service.svc/20" 
    binding="basicHttpBinding" bindingConfiguration="ABCServiceV2" 
    contract="ABCService.IService1" /> 
</client> 

クライアントを作成するためのコードは、のように以下の通りです:設定ファイルに追加されます以下のサービスを追加するには - 「できませんでしたしかし

ABCService.ServiceClient ABCClient = new ServiceClient("ABCServiceV2"); 

を、私はランタイムエラーを取得していますこれは、アプリケーションに設定ファイルが見つからなかったか、またはこの名前に一致するエンドポイント要素がクライアント要素に見つからなかった可能性があるためです(「ABCServiceV2」という名前のエンドポイント要素を検索し、「ABCService.IService」をServiceModelクライアント構成セクションで検索してください)。 "

私がABCService.ServiceClient ABCClient = new ServiceClient("ABCServiceV1");を使用した場合、すべて正常に動作します。しかし、ABCServiceV2を使用しているときは、ABCService.IServiceという契約を探す必要があるときにABCService.IService1を探します。

正しい契約を探すにはどうすればよいですか?

+0

ABCServiceV2のアドレスは、私はそれはそれでかどうかは何かを持っているかどうかわからないんだけど...「20」の末尾に付加されています。ただの観察。 – user959729

+0

エンドポイントを異ならせるためには '20'が必要であるため、問題はないと思います。サービスの両方のエンドポイントは、SoapUIのようなツールで正常に動作します。したがって、問題はクライアントコードのどこかにあります。 – ipoh

答えて

3

別のサービス(ABCServiceV2)に2番目の参照を追加した場合、これはABCServiceV2の2番目のサービスクラスを生成したと考えられます。この2つのクラスは別々の契約(ABCService.IServiceとABCService.IService1)を実装するため、エンドポイントを交換することはできません。

私はあなたがそうのようなあなたの2つのサービスのエンドポイントを初期化することができるはずと信じて:この記事は古いと答えているにもかかわらず

ABCService.ServiceClient ABCClient = new ServiceClient("ABCServiceV1"); 
ABCService.Service1Client ABCClient1 = new Service1Client("ABCServiceV2"); 
+1

ありがとうございます。問題は、私がService1Clientの代わりにServiceClientを使用していたことでした。次のコードは問題なく動作します:ABCService.Service1Client ABCClient1 = new Service1Client( "ABCServiceV2"); – ipoh

1

、答えは私の場合には助けにはなりませんでした。 私の問題は、svcutil.exeツールでサービスクライアントを生成しましたが、名前空間はまったく指定されていませんでした。したがって、契約ネームスペース名は、デフォルトでスキーマ文書のターゲット名前空間として生成されました。

一方、サービス参照がプロジェクトに追加されたときに生成された設定ファイルを使用しようとしました。このファイルのコントラクトネームスペースはServiceReference1(デフォルト)またはあなたが望む他の名前です。完璧なストーム!しかし、私がしなければならなかったのは、FQNからネームスペース部分を<endpoint>の契約属性から削除し、契約がCLRに見えるようにすることでした。

・ホープ、このヘルプ他人

関連する問題