WCFエンドポイントのXML構成で契約の名前空間を指定するにはどうすればよいですか?
-
11-10-2019 - |
質問
この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のコメントの質問への返信:
私はクライアント側について話している。 (私はこのビットについて言及するのを忘れていました;それは申し訳ありません。)このエラーはおそらくサーバー側から来ることができますか?
上記のサービス契約を生成しました。
BarClient
ビジュアルスタジオを介して、それを実装するクラス サービスリファレンスを追加します 施設。のURLを指定しましたBarService
, 、他の誰かによって実行されます。それは私がまた、サービスをに入れるべきだと指定したところですFoo.Services.BarService
名前空間。私はサービスを直接使用するつもりでした
BarClient
クラスは私のために自動生成されましたChannelFactory<BarContract>
.
解決
クライアントを作成します サービスリファレンスを追加します サービスから名前空間構造を再作成しません。作成されたすべてのタイプと契約は、サービスリファレンスの名前で定義された新しい名前空間に配置されます。だから、あなたはあなたのサービスリファレンスbarserviceという名前を付けたと思います。クライアント構成は、生成された契約の名前に従う必要があります。