1

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

直到我最后一次更改之前,我只是在我的应用程序启动时提取数据。我现在正在努力在此基础上添加一个订阅/发布模型,这样我就可以在 WCF 服务遇到导致数据更改的事件时引发事件(可以在客户端执行此操作,但我不会捕获其他用户变化)。

我一直在关注 Microsoft 的示例: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

连接字符串="数据源=winhacker\sqlexpress;初始目录=TaskDB;集成安全=True;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient"/>

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

4

1 回答 1

4

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

为了解决这个问题,您需要添加一个诊断部分以web.config将 WCF 信息捕获到一个svclog文件中,然后使用 Microsoft 的服务跟踪查看器检查日志并发现实际抛出的异常。

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 资源管理器中双击该文件并在该工具中自动打开日志。

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

于 2013-01-14T01:43:12.020 回答