1

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

有没有人对问题可能有任何想法?

如果有人愿意看一下,我将代码放在 github 上:https ://github.com/devlife/Sandbox/tree/master/WcfService1

4

2 回答 2

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>

于 2011-12-19T20:46:04.930 回答
0

为什么要使用 ServiceHostFactory?你打算使用 AppFabric/IIS 吗?还是自托管服务?

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

    <endpoint address="mex"
              binding="mexHttpBinding"
              contract="IMetadataExchange" />
于 2011-12-19T20:52:42.283 回答