发现WCF服务无法连接

本文关键字:连接 服务 WCF 发现 | 更新日期: 2023-09-27 17:53:00

我有一个WCF服务,我用它来公开一个数据源(通过EF模型连接)。我的终端因为某些原因停止了响应。

直到我的最后一次更改,我只是在我的应用程序启动时提取数据。我现在正在努力在此基础上添加订阅/发布模型,因此当某些东西击中WCF服务导致数据更改时,我可以抛出事件(可以在客户端做到这一点,但我不会捕获其他用户更改)。

我一直在遵循Microsoft: http://msdn.microsoft.com/en-us/library/ms752254.aspx的示例,并为我的服务接口和实现添加了适当的装饰,并添加了订阅/退订OperationContract等。然后尝试启动服务,但是无法连接。

然后我从客户端删除了服务引用,并试图重新连接。奇怪的是:

1) WCF服务在开发人员主机中构建和启动。2)网络。配置文件未被修改。3)在vs 2012中添加服务参考中的"发现服务"选项看到了服务,但是当我尝试实际接受发现的服务时,它会抛出一个错误,说"从地址下载元数据错误。

我不明白它怎么能发现服务,然后不能添加它作为参考。我可以看看是不是我自己添加的信息,但是它找到了。

作为添加发布功能的一部分,我添加了SessionMode。我不确定WCF是如何处理会话的,也没有在我的编码中处理过会话(通常从源中提取数据,然后在本地处理它,这是我过去需要的工具类型,所以不需要在服务器端持久化状态)。

任何想法?

my service:


<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 "/>

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

发现WCF服务无法连接

在我遇到这个错误的绝大多数情况下,这个问题是服务器端的序列化问题;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资源管理器中双击文件,并在工具中自动打开日志。

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