1

以下のような操作契約を持つ wcf サービスがあります。

[OperationContract]       
bool IsUserAvailable(string userName);

[OperationContract]
[WebInvoke(
    Method = "GET",
    ResponseFormat = WebMessageFormat.Json,
    UriTemplate = "CreateUser?userId={userId}")]
bool CreateUser(string userId);

1 つは webInvoke 属性で定義されていることに注意してください。これらのメソッドを使用する 2 つのアプリケーションがあります。アプリケーション 1 は、http Web 要求を通じて createUser メソッドを呼び出し、アプリケーション 2 (wcf クライアント) は IsUserAvailable を直接呼び出します。以下の web.config のように、基本的な http バインディングと webhttpBinding の両方を定義しようとすると、問題が発生します (バインディング インスタンスは、リッスン URI 'http://localhost:xxxx/BookStore.svc' に既に関連付けられています。 2 つのエンドポイントが同じ ListenUri を共有したい場合は、同じバインディング オブジェクト インスタンスも共有する必要があります.2 つの競合するエンドポイントは、AddServiceEndpoint() 呼び出し、構成ファイル、または AddServiceEndpoint() と構成の組み合わせで指定されました。)

  <endpoint binding="basicHttpBinding" contract="BookStore.IBook" address=""></endpoint>

  <endpoint address=""
            binding="webHttpBinding"
            behaviorConfiguration="webBehavior"
            contract="BookStore.IBook" />

  <endpoint address="mex"
              binding="mexHttpBinding"
              behaviorConfiguration="mexBehavior"
              contract="IMetadataExchange" />

私の質問は、問題が発生することなく、同じコントラクトに対して異なるバインディングを使用するにはどうすればよいかということです。basichttp バインディングを指定しないと、エラーが発生します (no endpoint listen)

4

1 に答える 1

4

異なるアドレスを使用する必要があります。webHttpBindingとbasicHttpBindingは(予想どおり)両方ともhttpスキーム上にあるため、2つのエンドポイントをアドレスで区別する必要があります。

于 2012-08-09T07:30:45.787 に答える