我正在更新连接到访问数据库的应用程序,该数据库缺乏任何安全性。
将来,它将位于带有SQL数据库的IIS服务器上,因此我选择创建一个Web服务来添加额外的安全层。该应用程序适用于Web服务和.NET开发服务器。
我可以在一个月内访问服务器,但是应用程序需要在一周内发布,所以我决定让应用程序自托管服务,并使用访问数据库,直到服务器准备就绪。
实际上,我的解决方案中有两个项目:AppServer和AppClient(带有对AppServer的Web服务引用)。当应用程序运行时,我可以使用Web浏览器访问该服务。
如何轻松自我托管我的服务,以便在主机准备好后将主机切换到IIS?
我尝试过使用ServiceHost,但由于它是一个Windows窗体应用程序并且遇到滞后和超时,因此效果不佳:
Uri httpUrl = new Uri("http://localhost:53333/AppServer.svc");
ServiceHost host = new ServiceHost(typeof(AppServerClient), httpUrl);
host.AddServiceEndpoint(typeof(IAppServer), new WSHttpBinding(), "");
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
host.Description.Behaviors.Add(smb);
host.Open();
我发现在不同的线程中运行服务的代码:http://www.codeproject.com/Articles/16299/Hosting-WCF-services-in-a-Windows-Forms-Applicatio
我将此代码添加到我的应用程序中(URL与服务引用相同)
ThreadedServiceHost<AppServerClient, IAppServer> host = new ThreadedServiceHost<AppServerClient, IAppServer>("http://localhost:53333/AppServer.svc", "", new WSHttpBinding());
当我运行我的应用程序时,我收到消息
Http://localhost:53333/AppServer.svc connection impossible.
TCP error code 10061: No connection could be made because the target machine
actively refused it 127.0.0.1:53333.
当我使用网络浏览器时,收到以下消息:您已创建服务。要测试此服务,您需要创建一个客户端并使用它来调用该服务。
我在通道工厂上读了一下,当你从a到z自己托管服务时,这似乎是一个不错的选择,但由于它很快将托管在另一台服务器上,我想避免不得不改变对服务的每次调用在申请中。
我真的很感激帮助解决这个问题。