我创建了一个wcf应用程序。我什么都没改变。使用了Service1.GetData(int)。它工作正常。我可以在浏览器和所有内容中点击wsdl。然后我创建了一个自定义服务主机工厂,只返回一个新的服务主机,服务永远不会出现。我无法再在浏览器中访问wsdl。我尝试添加一个Custom ServiceHost,这样我就可以进行一些调试,看起来没有找到端点(即使显式调用AddDefaultEndpoints()。即使我明确地将端点添加到web.config中也是如此。
有没有人对这个问题有什么想法?
如果有人想看看我把代码放在github上:https://github.com/devlife/Sandbox/tree/master/WcfService1
答案 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" />