添加Custom ServiceHostFactory时找不到端点

时间:2011-12-19 20:28:50

标签: wcf wcf-hosting

我创建了一个wcf应用程序。我什么都没改变。使用了Service1.GetData(int)。它工作正常。我可以在浏览器和所有内容中点击wsdl。然后我创建了一个自定义服务主机工厂,只返回一个新的服务主机,服务永远不会出现。我无法再在浏览器中访问wsdl。我尝试添加一个Custom ServiceHost,这样我就可以进行一些调试,看起来没有找到端点(即使显式调用AddDefaultEndpoints()。即使我明确地将端点添加到web.config中也是如此。

有没有人对这个问题有什么想法?

如果有人想看看我把代码放在github上:https://github.com/devlife/Sandbox/tree/master/WcfService1

2 个答案:

答案 0 :(得分:0)

以下是我在我正在处理的项目中定义CustomHost的方法,

<%@ ServiceHost Language="C#" Debug="true" Service="Servicename.Servicename" CodeBehind="Service1.svc.cs" Factory="WcfService1.CustomServiceHostFactory"%>

而且,

public class CustomServiceHostFactory : ServiceHostFactory
{
    public CustomServiceHostFactory()
    {

    }

    protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
    {
        return new CustomServiceHost(serviceType, baseAddresses);
    }
}

public class CustomServiceHost : ServiceHost
{
    public CustomServiceHost()
    {
    }

    public CustomServiceHost(Type serviceType, params Uri[] baseAddresses)
        : base(serviceType, baseAddresses)
    {
    }

    protected override void OnOpening()
    {
        base.OnOpening();
    }

    protected override void OnClosing()
    {
        base.OnClosing();
    }

    protected override void ApplyConfiguration()
    {
        base.ApplyConfiguration();
    }
}

请注意,CustomServiceHost看起来很裸露,但这是因为我的解决方案在我删除的CustomServiceHost中有很多日志记录和配置,并且不合适。

我可以看到的另一个区别是我的CustomServiceHost不添加端点。端点在配置文件中定义,如下所示,

<system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="ServiceBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service name="Servicename.Servicename" behaviorConfiguration="ServiceBehavior">
    <endpoint address="http://*******.svc" binding="wsHttpBinding" contract="Namespace.IContract" bindingConfiguration="BindingConfig">
    </endpoint>
  </service>
</services>
<bindings>
  <wsHttpBinding>
    <binding name="BindingConfig" maxReceivedMessageSize="9291456">
      <security mode="None">
      </security>
      <readerQuotas maxArrayLength="6291456" />
    </binding>
  </wsHttpBinding>
</bindings>

答案 1 :(得分:0)

您为什么使用ServiceHostFactory? 你打算用AppFabric / IIS吗?或自托管服务?

我认为您需要添加MEX端点。

    <endpoint address="mex"
              binding="mexHttpBinding"
              contract="IMetadataExchange" />