2

この WCF サービス コントラクトがあります (大幅に簡略化されていますが、含まれている名前空間に注意してください)。

namespace Foo.Services.BarService
{
    [ServiceContract]
    interface BarContract {... }
}

私のapp.config(クライアント側)では、いくつかのサービスのエンドポイントを構成します:

<endpoint address="..."
          binding="..."
          contract="Foo.Services.BarService.BarContract" />

ただし、これにより、 をサポートするクライアントの構成にエンドポイントが見つからないというエラーが発生しますBarService.BarContract。このエラーを取り除くには、contract属性値を変更するBarService.BarContract(名前空間を削除する) しかありません。

何故ですか?このエラーはどこから来たのでしょうか? コントラクト型の名前空間部分について触れてはいけないのはなぜですか? その結果、WCF が一致するエンドポイントを見つけられないという結果になるのではないでしょうか?


以下の @Ladislav Mrnka のコメントの質問に返信してください。

  • 私はクライアント側について話している。(ちょっと言い忘れました。申し訳ありません。) このエラーはサーバー側から発生する可能性がありますか?

  • BarClientVisual Studio の[サービス参照の追加]機能を使用して、上記のサービス コントラクトとそれを実装するクラスを生成しました。BarService他の人が運営しているの URL を指定しました。Foo.Services.BarServiceここで、サービスを名前空間に配置する必要があることも指定しました。

  • BarClientを介してではなく、自動生成されたクラスを介してサービスを直接使用するつもりでしたChannelFactory<BarContract>

4

1 に答える 1

3

Add Service 参照によってクライアントを作成しても、サービスから名前空間構造が再作成されません。作成されたすべての型とコントラクトは、サービス参照の名前で定義された新しい名前空間に配置されます。したがって、サービス参照に BarService という名前を付けたと思います。クライアント構成は、生成されたコントラクトの名前に従う必要があります。

于 2011-01-14T12:30:27.213 に答える