我已经阅读了互联网上似乎可用的内容,用于用自定义站点替换标准 WCF 登录页面,但是,这些解决方案似乎不适用于 IIS 托管。这个问题和这个演练都建议创建一个不匹配的消息处理程序并禁用元数据发布。但是,两者的评论都表明它在 IIS 中托管时不起作用,我可以确认情况确实如此。
是否缺少 IIS 所需的步骤?需要在服务器上配置的东西才能工作?任何帮助都会很棒。这是一个 .NET 4.5 WCF SOAP 服务。
在 IIS 托管的 WCF 服务中,ServiceHost 由 w3wp 为您创建(相对于您创建它的 selfhost)。默认情况下会在此 ServiceHost 中添加一个 ServiceDebug 行为,这会导致此行为不起作用。从 WCF 4.5 开始,您可以轻松地在代码中配置 IIS 托管服务。将这段代码添加到您的服务实现中。
public class Service1 : IService1, ILandingPage
{
...
...
public static void Configure(ServiceConfiguration serviceConfig)
{
//Still continue to load the service configuration from your web.config file as before.
serviceConfig.LoadFromConfiguration();
//Remove the serviceDebug behavior.
serviceConfig.Description.Behaviors.Remove<ServiceDebugBehavior>();
}
}
有关在代码中配置 IIS 托管服务的更多详细信息,请参阅此。如果您使用的是 .net 框架版本 < 4.5,您可以通过实现自定义服务主机工厂并在代码中自己完成所有服务配置来实现相同目的。