如何在子目录中发布第二个WCF服务?

时间:2013-12-24 18:01:26

标签: c# wcf iis iis-7

我在根目录(VPS,IIS 7)中有一个已发布的WCF服务。它有Service1.svc个文件和web.config文件 我想在子文件夹中的同一个IIS上发布另一个WCF服务(假设子文件夹的名称是subservice2)。另一个WCF服务还有Service2.svc个文件和web.config文件 我应该在哪里放置第二个WCF服务的文件以使其正常工作?
我是否需要在IIS中设置或更改任何设置? 我的第一次尝试只是创建一个子文件夹subservice2并将第二个WCF服务的所有文件放在那里,但这不起作用(如果我尝试访问Server Error in '/' Application.,我会mysiteaddress/subservice2/Service2.svc )。

2 个答案:

答案 0 :(得分:1)

您有几个选择。

  1. 将两个.svc端点合并为一个项目,更新web.config中的端点配置,然后将它们一起部署。如果两个项目具有单独的部署或维护计划,则可能无法实现这一点。
  2. 由于web.configs是在IIS中的同一个Web应用程序中继承的,因此您可以花费一些时间来消除所有配置冲突。这是可能的,但它既麻烦又复杂。
  3. 在IIS中创建一个新网站,并使用主机标头将流量定向到正确的网站。将新服务部署到新站点。如果您计划使用SSL,这也可能会出现配置问题。除非您使用通配符证书,否则IP和端口组合必须是唯一的。
  4. 如果您能够克服项目合并,选项#1很容易成为您的最佳解决方案。

答案 1 :(得分:1)

为什么不将服务绑定到不同的端口?以编程方式,这相当于:

ServiceHost host = new ServiceHost(typeof(MyService));
Binding wsBinding = new WSHttpBinding( );
Binding tcpBinding = new NetTcpBinding( );
host.AddServiceEndpoint(typeof(IMyContract),wsBinding,
   "http://localhost:8000/MyService");
host.AddServiceEndpoint(typeof(IMyContract),tcpBinding,
   "net.tcp://localhost:8001/MyService");
host.Open();

ServiceHost OtherHost = new ServiceHost(typeof(MyOtherService));
Binding wsBinding2 = new WSHttpBinding( );
OtherHost.AddServiceEndpoint(typeof(IMyOtherContract),wsBinding2,
   "http://localhost:8002/MyOtherService");
OtherHost.Open();

http://tutorials.csharp-online.net/WCF_Essentials%E2%80%94Programmatic_Endpoint_Configuration