我使用自定义wcf应用程序作为wcf服务器:
ServiceHost<AlertService> alertServiceHost = new ServiceHost<AlertService>();
configuredEndpoints = alertServiceHost.Description.Endpoints;
alertServiceHost.Open();
现在,我在IIS7.5的生产部署上遇到了问题。
我不知道如何在IIS上部署。因为我只知道我必须在IIS上创建用于托管的svc文件。现在,我只有控制台应用程序作为wcf服务工作。
如何将其转换为在IIS上部署?
谢谢。
答案 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
属性中的完整类型描述来托管来自其他程序集的服务类。