发现的WCF服务无法连接

时间:2013-01-14 01:33:53

标签: c# wcf .net-4.5

我有一个WCF服务,我用它来公开数据源(通过EF模型连接)。我的端点出于某种原因才停止响应。

直到我上次的更改,我只是在启动应用程序时提取数据。我现在正在努力在此基础上添加订阅/发布模型,这样当我遇到导致数据发生变化的WCF服务时,我可以抛出事件(可以在客户端进行,但我不会抓住其他用户)变化)。

我一直在关注微软的例子:http://msdn.microsoft.com/en-us/library/ms752254.aspx并在我的服务界面和实现中添加了相应的装饰,并添加了订阅/取消订阅OperationContract等。我尝试启动服务但不能连接。

我从我的客户端删除了服务参考,并尝试重新连接。这是奇怪的事情:

1)WCF服务在开发人员主机中构建和旋转。 2)未触及Web.Config文件。 3)vs 2012中添加服务引用中的“发现服务”选项可以看到该服务,但是当我尝试实际接受发现的服务时,它会抛出错误,说“从地址下载元数据时出错。

我不了解它如何发现服务,然后无法将其添加为参考。我可以看看我是否自己添加了信息,但它找到了它。

作为添加发布功能的一部分,我将SessionMode.Required标记添加到接口我不确定WCF如何处理会话,并且从未在我的编码中的任何其他地方处理会话(通常是拉数据)从源代码开始,而不是在本地进行处理,这是我过去需要做的工具类型,所以不需要持久保存服务器端。)

有什么想法吗?

我的服务web.config:

  

                                                                                                                                                                                                     
                          

<connectionStrings>
  <add name="TaskModelContainer" connectionString="metadata=res://*/TaskModel.csdl|res://*/TaskModel.ssdl|res://*/TaskModel.msl;provider=System.Data.SqlClient;provider
     

connection string =“data source = winhacker \ sqlexpress; initial   目录= TaskDB;集成   安全= TRUE; MultipleActiveResultSets = TRUE;应用=的EntityFramework “”   的providerName = “System.Data.EntityClient”/&GT;        

注意:请注意确保格式化的大部分文件没有显示在预览中,但是它足以说明它是一个自动生成的样板,而不是我添加了一个connectionStrings部分来喜欢我的EF数据点。如果你想看到文件点击“编辑”似乎显示我复制的源虽然有点格式化怪异。

1 个答案:

答案 0 :(得分:3)

在我遇到此错误的绝大多数情况下,问题一直是服务器端的序列化问题; WCF将在元数据发现阶段抛出异常,但VS不会显示此异常。

为了解决此问题,您需要向web.config添加诊断部分以将WCF信息捕获到svclog文件中,然后使用Microsoft的Service Trace Viewer检查日志并发现抛出的实际异常。

web.config部分应如下所示:

  <system.diagnostics>
    <sources>
      <source name="System.ServiceModel"
              switchValue="Information, ActivityTracing"
              propagateActivity="true">
        <listeners>
          <add name="traceListener"
              type="System.Diagnostics.XmlWriterTraceListener"
              initializeData="c:\log\WebTrace.svclog"  />
        </listeners>
      </source>
    </sources>
  </system.diagnostics>

并在<configuration>级别添加。

添加配置并确保指定的目录存在后,请尝试再次添加服务引用。这应该导致生成指定的svclog文件。

如果您在该计算机上安装了VS,则应该只需在Windows资源管理器中双击该文件,并在该工具中自动打开日志。

打开日志后,在左侧窗格中查看活动列表,然后单击第一个红色。然后,在右上方窗格中,选择第一个为红色(或显示异常,我忘记了哪个)。然后,您可以单击该按钮以查看详细信息,包括右下方窗格中的异常信息。