如何在IIS 7.5上托管自定义wcf应用程序(服务器)?

时间:2011-03-06 13:28:45

标签: wcf

我使用自定义wcf应用程序作为wcf服务器:

ServiceHost<AlertService> alertServiceHost = new ServiceHost<AlertService>();
configuredEndpoints = alertServiceHost.Description.Endpoints;
alertServiceHost.Open();

现在,我在IIS7.5的生产部署上遇到了问题。

我不知道如何在IIS上部署。因为我只知道我必须在IIS上创建用于托管的svc文件。现在,我只有控制台应用程序作为wcf服务工作。

如何将其转换为在IIS上部署?

谢谢。

2 个答案:

答案 0 :(得分:2)

如果要在IIS主机方案中使用自定义服务主机,则需要提供将返回该类型服务主机的自定义ServiceHostFactory,并在SVC文件中配置该服务主机工厂。 / p>

基本上,您的自定义服务主机工厂必须从ServiceHostFactory下降并覆盖一个返回自定义服务主机实例的方法 - 类似于以下内容:

public class MyOwnServiceHostFactory : ServiceHostFactory 
{ 
    protected override ServiceHost CreateServiceHost(Type t, Uri[] baseAddresses) 
    { 
        return new MyOwnCustomServiceHost(t, baseAddresses); 
    }

    public override ServiceHostBase CreateServiceHost(string service, Uri[] baseAddresses)
    {
         // The service parameter is ignored here because we know our service.
         ServiceHost serviceHost = new ServiceHost(typeof(HelloService), baseAddresses);
         return serviceHost;
    }
}

在您的SVC文件中,您现在需要:

<%@ ServiceHost Language="C#" Debug="true" 
        Service="YourNamespace.YourService" 
        Factory="YourNamespace.MyOwnServiceHostFactory" %> 

了解更多关于:

答案 1 :(得分:1)

在IIS中托管时,您不需要自己创建ServiceHost。这是IIS的可靠性以及.svc文件存在的原因。 Svc文件指示工作进程应该托管的方式和服务。

Svc文件由简单指令(标记)组成:

<%@ ServiceHost Language="C#" Debug="true" Service="MyNamespace.MyService" CodeBehind="MyService.svc.cs" %> 

这是托管本地创建服务的.svc文件的示例,但您可以省略CodeBehind属性并使用Service属性中的完整类型描述来托管来自其他程序集的服务类。

同时检查How to: Host WCF service in IIS