1

***私のプログラムクラスに従ってapp.configファイルを提供していただけませんか

可能であれば、app.configコードを提供してください。私はあなたの主張を理解しましたが、そのためにあなたが言っていることは私には方法がわかりません***

に到達するとエラーが発生するため、このコードは機能していませんhost.open()。問題を解決するのを手伝ってください

public class Program
{
    static void Main(string[] args)
    {
        // Base address
        Uri baseServiceAddress = new Uri("http://localhost:8090/Welcome");

        using (var host = new ServiceHost(typeof(WCFSelfHostedService), baseServiceAddress))
        {
            // Enable MetaData publishing.
            ServiceMetadataBehavior serviceMetaDataBehaviour = new ServiceMetadataBehavior();
            serviceMetaDataBehaviour.HttpGetEnabled = true;
            serviceMetaDataBehaviour.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;
            host.Description.Behaviors.Add(serviceMetaDataBehaviour);

            // Open the ServiceHost to start listening for messages. No endpoint are explicitly defined, runtime creates default endpoint.
            host.Open();

            Console.WriteLine("The service is ready at {0} and host at {1}", baseServiceAddress, DateTime.Now.ToString());
            Console.WriteLine("The service and client is running in the same process.");

            WCFSelfHostedService selfHostService = new WCFSelfHostedService();

            Console.Write("Enter your name. : ");
            Console.WriteLine(selfHostService.WelComeMessage(Console.ReadLine()));
            Console.WriteLine("Host is running... Press <Enter> key to stop the service.");
            Console.ReadLine();

            //Close the service.
            host.Close();
        }
    }
}

このコードを実行すると、次のエラーが発生します。

System.ServiceModel.dllでタイプ「System.InvalidOperationException」の未処理の例外が発生しました

追加情報:サービス'WCFSelfHostedService.WCFSelfHostedService'には、アプリケーション(非インフラストラクチャ)エンドポイントがありません。これは、アプリケーションの構成ファイルが見つからなかったか、構成ファイルにサービス名に一致するサービス要素が見つからなかったか、サービス要素にエンドポイントが定義されていなかったことが原因である可能性があります。

app.configは:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
   <system.serviceModel> 
      <client> 
         <endpoint 
             address ="localhost:8090/Welcome"; 
             binding ="wsHttpBinding" 
             contract ="MyCalculatorService.ISimpleCalculator"> 
         </endpoint> 
      </client> 
   </system.serviceModel> 
</configuration>
4

1 に答える 1

2

エラーは明らかです。サービスにアプリケーション エンドポイントが定義されていません。

サービス エンドポイントを構成する、表示されていない構成ファイルがあるか (表示されている場合:表示してください!)、またはコードで少なくとも 1 つのサービス エンドポイントを設定する必要があります。

したがってapp.config、セルフホスティングが発生しているアプリのファイルを作成し、次のようなものを追加します。

<system.serviceModel>
    <services>
        <service name="YourNamespace.WCFSelfHostService" >
           <endpoint name="Default"
               address="http://yourServerName:8088/SomePlace/ServiceName"
               binding="basicHttpBinding"
               contract="YourNamespace.IWCFSelfHostService" />
        </service> 
    </services>
</system.serviceModel>

または、コードを変更して、コードで少なくとも 1 つのサービス エンドポイントを設定します -呼び出すhost.Open()に:

// Base address
Uri baseServiceAddress = new Uri("http://localhost:8090/Welcome");

using (var host = new ServiceHost(typeof(WCFSelfHostedService), baseServiceAddress))
{
   // Enable MetaData publishing.
   ServiceMetadataBehavior serviceMetaDataBehaviour = new ServiceMetadataBehavior();
   serviceMetaDataBehaviour.HttpGetEnabled = true;
   serviceMetaDataBehaviour.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;
   host.Description.Behaviors.Add(serviceMetaDataBehaviour);

   // Define AT LEAST one service endpoint
   host.AddServiceEndpoint(typeof(IWCFSelfHostService), new BasicHttpBinding(), baseServiceAddress);

   // Open the ServiceHost to start listening for messages. No endpoint are explicitly defined, runtime creates default endpoint.
   host.Open();

   Console.WriteLine("The service is ready at {0} and host at {1}", baseServiceAddress, DateTime.Now.ToString());
   Console.WriteLine("The service and client is running in the same process.");

   WCFSelfHostedService selfHostService = new WCFSelfHostedService();

   Console.Write("Enter your name. : ");
   Console.WriteLine(selfHostService.WelComeMessage(Console.ReadLine()));
   Console.WriteLine("Host is running... Press <Enter> key to stop the service.");

   Console.ReadLine();

   // Close the service.
   host.Close();
}

更新:app.configあなたが私たちに示しているのは、サービスを呼び出すプログラムであるクライアントを定義することです。ただし、必要なのはサービスapp.config側を定義するです。私の例を参照してください。構成で1 つまたは複数を定義する必要があります。これにより、クライアントが接続できる少なくとも 1 つのアプリケーションエンドポイントが公開されます。<services>

WCF は常に(サーバー上の)サービスと、そのサービスを呼び出す1 つ (または複数)のクライアントで構成されます。WCF アーキテクチャの非常に基本的な概要については、この記事を参照してください。サービスはセクションの構成ファイルで構成されますが<services>/<service>、クライアント側はセクションでそれらのものを定義する必要があります<client>

于 2012-11-24T09:44:54.273 に答える