9

私はWCFの初心者で、EssentialWCFで勉強しています。

ServiceContractNameSpaceとNameを使用しているときに問題が発生しました。コードを実行すると、次のInvalidOperationExceptionが発生します。でもはっきりとはわかりませんでした。

バインディングインスタンスは、URI'http:// localhost:8080/NamespaceChange01'をリッスンするためにすでに関連付けられています。2つのエンドポイントが同じListenUriを共有する場合は、同じバインディングオブジェクトインスタンスも共有する必要があります。競合する2つのエンドポイントは、AddServiceEndpoint()呼び出し、構成ファイル、またはAddServiceEndpoint()とconfigの組み合わせのいずれかで指定されました。

誰かがInvalidOperationExceptionを回避する方法を知っていますか?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;

namespace NamespaceChange01
{

    [ServiceContract(Name = "MyServiceName", Namespace = "http://ServiceNamespace")]
    public interface IBurgerMaster
    {
        [return: MessageParameter(Name = "myOutput")]
        [OperationContract(Name = "OperationName", Action = "OperationAction", ReplyAction = "ReplyActionName")]
        double GetStockPrice(string ticker);
    }

    [ServiceBehavior(Namespace = "http://MyService")]
    public class BurgerMaster : IBurgerMaster
    {

        public double GetStockPrice(string ticker)
        {
            return 100.99;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            ServiceHost host = new ServiceHost(typeof(BurgerMaster));
            host.Open();
            Console.ReadLine();
            host.Close();
        }
    }
}
  • app.config

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.serviceModel>
        <services>
          <service name="NamespaceChange01.BurgerMaster" behaviorConfiguration="mexServiceBehavior">
            <host>
              <baseAddresses>
                <add baseAddress="http://localhost:8080/NamespaceChange01"/>
              </baseAddresses>
            </host>
            <endpoint name="basic" binding="basicHttpBinding" contract="NamespaceChange01.IBurgerMaster"/>
            <endpoint name="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
          </service>
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior name="mexServiceBehavior">
              <serviceMetadata httpGetEnabled="true"/>
            </behavior>
          </serviceBehaviors>
        </behaviors>
      </system.serviceModel>
    </configuration>
    

ありがとう。

4

4 に答える 4

23

2つのエンドポイント(basicとmex)を同じアドレスに配置することはできません。それらの1つ(または両方)に特定のアドレスを追加します。

例えば:

<endpoint name="mex" address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
于 2012-07-16T15:16:51.280 に答える
5

メタデータエンドポイントにアドレス属性がありません:

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

これがないと、WCFはmexエンドポイントを同じアドレスでホストしたいと考えます。

于 2012-07-16T15:16:08.217 に答える
0

私はこれが古い質問であることを知っていますが、私は最近非常によく似た問題を抱えていました、そしてグーグルは私をここに連れて行きました、そして私は異なる潜在的な解決策を持っています:

問題のサービスのタグが完全に欠落serviceしていて、IISでそのサービスのHTTPおよびHTTPSバインディングがある場合、説明したのとまったく同じエラーメッセージが表示されました。

当然、serviceタグを追加すると問題が修正されました。興味深いことに、IISでHTTPSバインディングを削除すると、HTTPバージョンが使用可能になりました(ただし、これは明らかに望ましくありませんでした)。

于 2019-07-24T11:48:57.220 に答える
-2

サービスクラスを作成しているときに、コードに示されているように、なぜServiceContract属性でマークしたのですか?

[ServiceBehavior(Namespace = "http://MyService")]
public class BurgerMaster : IBurgerMaster

その1つを削除して、再試行してください。

于 2012-07-16T14:48:43.900 に答える