【问题标题】:Discovered WCF service can't connect发现 WCF 服务无法连接
【发布时间】:2013-01-14 09:43:12
【问题描述】:

我有一个 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;集成 安全=真;MultipleActiveResultSets=真;应用=实体框架"" providerName="System.Data.EntityClient"/>

注意:请注意,大多数文件的格式设置不会显示在预览中,但只要说它是自动生成的样板文件就足够了,除了我添加了一个 connectionStrings 部分来喜欢我的EF 数据点。如果你想查看文件,点击“编辑”似乎会显示我复制的源代码,虽然格式有点奇怪。

【问题讨论】:

    标签: c# wcf .net-4.5


    【解决方案1】:

    在我遇到此错误的绝大多数情况下,问题是服务器端的序列化问题; 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>
    

    并添加到&lt;configuration&gt; 级别。

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

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

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

    【讨论】:

    • 非常感谢。我回家后试试看。目前一切都在我的开发盒上本地运行,所以我感到困惑的一部分:VS 设置主机,构建服务,找到服务供我的客户使用,但仍然对这个世界不满意 :) 日志会很好.
    • 您对日志文件的提示很有效……至少可以让我达到需要深入挖掘的地步。我使用的是不支持会话的 basichttp 连接。然后我查了一下,发现如何在启用会话的情况下连接 wshttpbinding。现在我的合同本身出现错误,我认为这可能很好,因为我的代码中仍然有自动实现的接口(抛出 NotImplementedException 等)所以我猜如果我的合同正确实施,一切都会正常工作,但不管日志会帮助追踪事情。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多