0

私はちょうど wcf を学んでいて、WCF サービスを作成しようとしましたが、この例外が発生し続けます:

未処理の例外: System.ServiceModel.EndpointNotFoundException:http://localhost:8733/Person/メッセージを受け入れることができるリッスンしているエンドポイントがありませんでした。これは、多くの場合、アドレスまたは SOAP アクションが正しくないことが原因です。詳細については、存在する場合は InnerException イオンを参照してください。---> System.Net.WebException: リモート サーバーに接続できません ---> System.Net.Sockets.SocketException: ターゲット マシンがアクティブに拒否したため、接続できませんでした 127.0.0.1:8733

WCF サービス ライブラリを作成することから始めました。ここでサービス コントラクトとデータ コントラクトを定義しました。エンドポイント ウィッチを次のように構成しました。

<service name="SelfHosting.PersonContract">
    <endpoint address="" binding="basicHttpBinding" contract="SelfHosting.IPersonContract">
      <identity>
        <dns value="localhost" />
      </identity>
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8733/Person/" />
      </baseAddresses>
    </host>
  </service>

これらの 2 つのエンドポイントは既に追加されており、必要に応じて構成したところです。mex エンドポイントが何に使用されているのかわからないので、誰かに教えてもらいたいと思っています。

次に、コンソール アプリケーションを作成し、サービスへの参照を追加しました。サービスのインスタンスを初期化してから、それを呼び出してみました。

static PersonContractClient client = new PersonContractClient();

static void Main(string[] args)
{
        var persons = client.GetPersons();
        foreach (var personData in persons)
        {
            Console.WriteLine(personData.Name);
            Console.WriteLine(personData.Email);
        }
    }

サービスへの参照を追加すると自動的に追加されることがわかっているため、クライアントにエンドポイントを設定していません。これは、参照を追加した後に追加されました。

 <endpoint address="http://localhost:8733/Person/" binding="basicHttpBinding"
            bindingConfiguration="BasicHttpBinding_IPersonContract" contract="PersonNamespace.IPersonContract"
            name="BasicHttpBinding_IPersonContract" />

私のソリューションには、Entity Framework を使用して取得したデータを持つ別のプロジェクトも含まれています。これが問題に関連しているかどうかはわかりません。

ここで何が間違っていますか?

4

2 に答える 2

0

コンソール アプリケーションでセルフ ホストを使用して二重 wcf 通信を作成しようとしたときに、同様の問題が発生しました。この例http://adamprescott.net/2012/08/15/a-simple-wcf-service-callback-example/に従うと、明確になりました。エラーが出るのが普通

「未処理の例外: System.ServiceModel.EndpointNotFoundException:メッセージを受け入れることができるhttp://localhost:8733/Person/でリッスンしているエンドポイントがありませんでした。これは多くの場合、アドレスまたは SOAP アクションが正しくないことが原因です。InnerException を参照してください。 ---> System.Net.WebException: リモート サーバーに接続できません ---> System.Net.Sockets.SocketException: ターゲット マシンがアクティブに拒否したため、接続できませんでした 127.0 .0.1:8733"

クライアント コンソール アプリでサービス参照を検出する前に、フォルダーの場所で .exe を右クリックしてサービスの実行可能ファイル (.exe) を起動し、サービス app.config のベースアドレスに uri をコピーする必要があります。サービス参照の追加ダイアログに貼り付けて、[OK...]をクリックすると修正されました。質問が少し古いので、これが他の人に役立つことを願っています。

于 2015-12-06T00:45:11.920 に答える
0

URL の「localhost」の代わりに、エンドポイントの IP アドレスを使用します。

于 2016-04-19T17:38:35.823 に答える