2

以前にタスクバーの .asmx サービスで実行されていた WCF サービスをコンソール アプリにラップしようとしています。

WCF サービスをラップするコードは次のとおりです。

class Program
{
    static void Main(string[] args)
    {
        Uri uri = new Uri("http://localhost:5000");

        using (ServiceHost host = new ServiceHost(typeof(CheckoutService), uri))
        {
                Console.WriteLine("Prepping CheckoutService server");
                ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
                smb.HttpGetEnabled = true;
                smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;
                host.Description.Behaviors.Add(smb);

                host.Open();

                Console.Clear();
                Console.WriteLine("CheckoutService server up and running");
                Console.WriteLine("Press Return to stop service at any point");
                Console.ReadLine();
                host.Close();
        }
    }

ただし、このサービスを受信する必要があるクライアント アプリケーション (サービスがコンソール アプリにラップされる前に動作していた) は、次のエラーでクラッシュします。

メッセージを受け入れることができるhttp://localhost:5000/CheckoutService.svcでリッスンしているエンドポイントはありませんでした。これは、多くの場合、アドレスまたは SOAP アクションが正しくないことが原因です。詳細については、InnerException (存在する場合) を参照してください。

app.config でのこのクライアントのエンドポイント構成は次のとおりです。

<endpoint 
    address="http://localhost:5000/CheckoutService.svc"
    binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ICheckoutService"
    contract="CheckoutServiceServer.ICheckoutService" name="BasicHttpBinding_ICheckoutService" />

.configおそらく、WCF サービスをホストしているコンソール プロジェクトで何らかの形式のファイルが不足していると思いますが、間違っている可能性があります。

4

2 に答える 2

3

ユーザーの入力を待たずにホストを閉じているようです。行方不明Console.ReadLine()ですか?

于 2012-04-30T16:33:34.500 に答える
0

ServiceHostインスタンスのエンドポイントを構成していません。参照した構成ファイルは使用されていませんが、このファイルに基づいて、 BasicHttpBindingバインディングServiceHostを使用するようにインスタンスを構成し、メソッドを介してサービス エンドポイントを構成するコントラクトを構成する必要があります。CheckoutServiceServer.ICheckoutServiceServiceHost.AddServiceEndpoint()

WCF サービスのホスティングについては、この記事を参照してください。

于 2012-04-30T17:43:27.163 に答える