我有一个简单的WCF服务,其中包含一个已定义的操作-
[ServiceContract]
public interface IFacadeService
{
[OperationContract]
void ReceiveXML(XElement xmlPayload);
}
public class FacadeService : IFacadeService
{
public void ReceiveXML(XElement xmlPayload)
{
//Implementation
}
}
问题在于,当通过诸如SOAP UI之类的客户端调用操作时,服务不会响应。 SOAP UI只是超时,因为它没有收到任何返回。
该呼叫永远不会到达服务。它停止在某些内部WCF层。我启用了WCF日志记录功能,发现它到达后立即卡在“流程操作” 下-
“已打开System.ServiceModel.InstanceContext / 22021704”
奇怪的是,该服务仅在特定计算机上不起作用。打开“ InstanceContext”时,运行WCF服务的计算机不会卡死。
如您在第二张图中看到的,消息实际上到达了服务并且没有被卡住。
两台计算机之间的唯一区别是,一台是Windows Server 2016,另一台是Windows Server 2008 R2。这些服务正在使用.NET 4.5。我可以根据需要提供其他详细信息。
不确定它是否重要,但是此WCF服务托管在Windows Service中。它使用ServiceHost类初始化。基本上使用Microsoft在此描述的技术-
How to: Host a WCF Service in a Managed Windows Service
这是服务的配置-
<serviceBehaviors>
<behavior name="AutoImportFacadeSvcBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="webBehavior">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="AutoImportFacadeSvcBehavior" name="MediaPulse.WorkFlowLibrary.AutoImportFacadeService.FacadeService">
<endpoint address="" binding="webHttpBinding" behaviorConfiguration="webBehavior" contract="MediaPulse.WorkFlowLibrary.AutoImportFacadeService.IFacadeService"/>
<host>
<baseAddresses>
<add baseAddress="http://MSMMLDXYTECH:8122/FacadeService"/>
</baseAddresses>
</host>
</service>
</services>
我不知道如何进一步调试它。