1

VS 内で自己ホスト型 WCF (WCF サービス Lib + コンソール アプリ) サービスを実行すると、問題が発生しました。すべて正常に動作します。プロジェクト ディレクトリで consoleapplication.exe を実行したい場合、すべて正常に動作しているように見えますが、動作しません。(私はC#が初めてです)

私はテストしました:管理者として実行し(ファイアウォールをオンまたはオフ)、http urlaclを介してサービスを予約します

正常に動作するということは、サービスにリモートでアクセスできることを意味します。正常に動作しないということは、evan が localhost 経由でアクセスできないことを意味します。

不足している依存関係はありますか?

前もって感謝します!

consoleApp の App.config:

    <system.serviceModel>
    <behaviors>
        <serviceBehaviors>
            <behavior name="NewBehavior">
                <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"
                    policyVersion="Default" />
            </behavior>
        </serviceBehaviors>
    </behaviors>
    <services>
        <service behaviorConfiguration="NewBehavior" name="SampleEmpServiceLib.EmpService">
            <clear />
            <endpoint address="basic" binding="basicHttpBinding" contract="SampleEmpServiceLib.IEmpService"
                listenUriMode="Explicit" />
            <endpoint address="http://localhost:8060/EmpS" binding="wsDualHttpBinding" bindingConfiguration=""
                contract="SampleEmpServiceLib.IEmpService" listenUriMode="Explicit" />
            <endpoint address="net.tcp://localhost:8888/EmpS" binding="netTcpBinding"
                contract="SampleEmpServiceLib.IEmpService" listenUriMode="Explicit" />
            <endpoint address="net.pipe://localhost/EmpS" binding="netNamedPipeBinding"
                contract="SampleEmpServiceLib.IEmpService" listenUriMode="Explicit" />
            <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration=""
                contract="IMetadataExchange" />
            <host>
                <baseAddresses>
                    <add baseAddress="http://localhost:8080/EmpS/" />
                </baseAddresses>
            </host>
        </service>
    </services>
</system.serviceModel>

Program.cs のコード

using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.Text;
using SampleEmpServiceLib;
using System.ServiceModel.Description;
namespace ConsoleApplication
{
class Program
{
    static void Main(string[] args)
    {
        ServiceHost host = new ServiceHost(typeof(EmpService));

        host.Open();
        Console.WriteLine("running on endpoints:");
        foreach (ServiceEndpoint serviceEndpoint in host.Description.Endpoints)
            Console.WriteLine(serviceEndpoint.Address.ToString());

        Console.WriteLine("running");
        Console.ReadLine();
        host.Close();
    }
}

}

4

1 に答える 1

1

構成の更新をいくつか提案できます。

<system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="NewBehavior">
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"
              policyVersion="Default" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service behaviorConfiguration="NewBehavior" name="SampleEmpServiceLib.EmpService">
        <clear />
        <endpoint binding="basicHttpBinding" contract="SampleEmpServiceLib.IEmpService" listenUriMode="Explicit" />
        <endpoint address="dual" binding="wsDualHttpBinding" bindingConfiguration="" contract="SampleEmpServiceLib.IEmpService" listenUriMode="Explicit" />
        <endpoint binding="netTcpBinding" contract="SampleEmpServiceLib.IEmpService" listenUriMode="Explicit" />
        <endpoint binding="netNamedPipeBinding" contract="SampleEmpServiceLib.IEmpService" listenUriMode="Explicit" />
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8080/EMPS" />
            <add baseAddress="net.tcp://localhost:8888/EMPS" />
            <add baseAddress="net.pipe://localhost/" />
          </baseAddresses>
        </host>
      </service>
    </services>
  </system.serviceModel>
于 2013-05-22T10:00:25.577 に答える