0

外部ハードウェアを制御する既存の .NET アプリケーションがあります。PC に既に存在する機能の一部を、ローカル ネットワーク上でのみ使用されるスマートフォン アプリに拡張することを検討しています。これは、単一の場所にインストールされるエンタープライズ システムではなく、一般に販売されるシステムです。WCF は優れたソリューションのように見えますが、サービスのセットアップ、IIS の構成などを手動でユーザーに説明する必要がある場合、それは大きな問題です。プログラムで WCF サービスをデプロイして、ローカル ネットワークで表示するにはどうすればよいですか?

4

2 に答える 2

1

WCF は、いくつかの異なる方法でホストできます。ここにあなたを動かす素晴らしい記事があります。「ホスティング オプションの探索」というセクションにジャンプできます。

于 2013-10-15T14:56:33.983 に答える
0

私はそれを理解しました。Code Chops が指摘したように、明らかに複数のホスティング方法があります。私の要件では、拡張しているプログラムが実行されているときに実行されている自己ホスト型ソリューションが必要です。また、xml 構成なしで C# のみを使用しました。これにより、プログラムでローカル IP アドレスを特定できます (表示されていません)。これはすべて、通常のコンソール アプリで実行されます。

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


    namespace SelfHost
    {
        class Program
        {
            static void Main(string[] args)
            {     
                string localIP = "192.168.1.5";
                string port = "8001";
                Uri baseAddress = new Uri("http://" + localIP + ":" + port + "/hello");

                using (ServiceHost host = new ServiceHost(typeof(HelloWorldService), baseAddress))
                {                       
                    ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
                    smb.HttpGetEnabled = true;
                    smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;
                    host.Description.Behaviors.Add(smb);
                    host.AddServiceEndpoint(typeof(IHelloWorldService), new WebHttpBinding(), "");
                    host.Description.Endpoints[0].Behaviors.Add(new WebHttpBehavior { HelpEnabled = true });                
                    host.Open();

                    Console.WriteLine("The service is ready at {0}", baseAddress);
                    Console.WriteLine("Press <Enter> to stop the service.");
                    Console.ReadLine();

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

        [ServiceContract]
        public interface IHelloWorldService
        {
            [OperationContract]
            [WebGet(UriTemplate = "SayHello/{name}")]
            string SayHello(string name);

            [OperationContract]
            [WebGet(UriTemplate = "SayGoodbye/{name}")]
            string SayGoodbye(string name);
        }

        public class HelloWorldService : IHelloWorldService
        {
            public string SayHello(string name)
            {
                return string.Format("Hello, {0}", name);
            }

            public string SayGoodbye(string name)
            {
                return string.Format("Goodbye, {0}", name);
            }

        }


    }
于 2013-10-15T21:51:31.387 に答える