Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 发现的WCF服务可以';t连接_C#_Wcf_.net 4.5 - Fatal编程技术网

C# 发现的WCF服务可以';t连接

C# 发现的WCF服务可以';t连接,c#,wcf,.net-4.5,C#,Wcf,.net 4.5,我有一个WCF服务,用于公开数据源(通过EF模型连接)。我的端点由于某种原因停止了响应 <connectionStrings> <add name="TaskModelContainer" connectionString="metadata=res://*/TaskModel.csdl|res://*/TaskModel.ssdl|res://*/TaskModel.msl;provider=System.Data.SqlClient;provider 直到最后一次更改

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

<connectionStrings>
  <add name="TaskModelContainer" connectionString="metadata=res://*/TaskModel.csdl|res://*/TaskModel.ssdl|res://*/TaskModel.msl;provider=System.Data.SqlClient;provider
直到最后一次更改之前,我只是在启动应用程序时提取数据。我现在正致力于在此基础上添加订阅/发布模型,以便在WCF服务中出现导致数据更改的事件时抛出事件(可以在客户端执行,但不会捕获其他用户的更改)

<connectionStrings>
  <add name="TaskModelContainer" connectionString="metadata=res://*/TaskModel.csdl|res://*/TaskModel.ssdl|res://*/TaskModel.msl;provider=System.Data.SqlClient;provider
我一直遵循Microsoft的示例:在我的服务界面和实现中添加了适当的装饰,并添加了订阅/取消订阅操作合同等。我尝试启动服务,但无法连接

<connectionStrings>
  <add name="TaskModelContainer" connectionString="metadata=res://*/TaskModel.csdl|res://*/TaskModel.ssdl|res://*/TaskModel.msl;provider=System.Data.SqlClient;provider
然后,我从我的客户端删除了服务引用,并尝试重新连接。奇怪的是:

<connectionStrings>
  <add name="TaskModelContainer" connectionString="metadata=res://*/TaskModel.csdl|res://*/TaskModel.ssdl|res://*/TaskModel.msl;provider=System.Data.SqlClient;provider
1) WCF服务在开发人员主机中构建和启动。 2) 未触及Web.Config文件。 3) vs 2012中添加服务参考中的“Discover Services”选项可以看到该服务,但当我尝试实际接受发现的服务时,它会抛出一个错误,显示“从地址下载元数据时出错”

<connectionStrings>
  <add name="TaskModelContainer" connectionString="metadata=res://*/TaskModel.csdl|res://*/TaskModel.ssdl|res://*/TaskModel.msl;provider=System.Data.SqlClient;provider
我不知道它如何发现服务,然后无法将其添加为引用。我可以查看是否是我自己添加的信息,但它找到了它

<connectionStrings>
  <add name="TaskModelContainer" connectionString="metadata=res://*/TaskModel.csdl|res://*/TaskModel.ssdl|res://*/TaskModel.msl;provider=System.Data.SqlClient;provider
作为添加发布功能的一部分,我在接口中添加了SessionMode.Required标记,我不确定WCF如何处理会话,也不知道在我的编码中是否需要处理其他任何地方的会话(通常从源代码中提取数据,然后在本地处理它,这是我过去需要使用的工具类型,因此不需要在服务器端持久化状态)

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

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

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

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

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

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

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

<connectionStrings>
  <add name="TaskModelContainer" connectionString="metadata=res://*/TaskModel.csdl|res://*/TaskModel.ssdl|res://*/TaskModel.msl;provider=System.Data.SqlClient;provider
为了解决此问题,您需要在
web.config
中添加一个诊断部分,将WCF信息捕获到
svclog
文件中,然后使用Microsoft的检查日志并发现引发的实际异常

<connectionStrings>
  <add name="TaskModelContainer" connectionString="metadata=res://*/TaskModel.csdl|res://*/TaskModel.ssdl|res://*/TaskModel.msl;provider=System.Data.SqlClient;provider
web.config
部分应该如下所示:

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

并在
级别添加

<connectionStrings>
  <add name="TaskModelContainer" connectionString="metadata=res://*/TaskModel.csdl|res://*/TaskModel.ssdl|res://*/TaskModel.msl;provider=System.Data.SqlClient;provider
添加配置并确保指定的目录存在后,请尝试再次添加服务引用。这将导致生成指定的svclog文件

<connectionStrings>
  <add name="TaskModelContainer" connectionString="metadata=res://*/TaskModel.csdl|res://*/TaskModel.ssdl|res://*/TaskModel.msl;provider=System.Data.SqlClient;provider
如果您在该计算机上安装了VS,您应该能够在Windows资源管理器中双击该文件,并在该工具中自动打开日志

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

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

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

<connectionStrings>
  <add name="TaskModelContainer" connectionString="metadata=res://*/TaskModel.csdl|res://*/TaskModel.ssdl|res://*/TaskModel.msl;provider=System.Data.SqlClient;provider
为了解决此问题,您需要在
web.config
中添加一个诊断部分,将WCF信息捕获到
svclog
文件中,然后使用Microsoft的检查日志并发现引发的实际异常

<connectionStrings>
  <add name="TaskModelContainer" connectionString="metadata=res://*/TaskModel.csdl|res://*/TaskModel.ssdl|res://*/TaskModel.msl;provider=System.Data.SqlClient;provider
web.config
部分应该如下所示:

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

并在
级别添加

<connectionStrings>
  <add name="TaskModelContainer" connectionString="metadata=res://*/TaskModel.csdl|res://*/TaskModel.ssdl|res://*/TaskModel.msl;provider=System.Data.SqlClient;provider
添加配置并确保指定的目录存在后,请尝试再次添加服务引用。这将导致生成指定的svclog文件

<connectionStrings>
  <add name="TaskModelContainer" connectionString="metadata=res://*/TaskModel.csdl|res://*/TaskModel.ssdl|res://*/TaskModel.msl;provider=System.Data.SqlClient;provider
如果您在该计算机上安装了VS,您应该能够在Windows资源管理器中双击该文件,并在该工具中自动打开日志

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

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

非常感谢。我回家后会尝试。目前我的开发设备盒上的所有东西都在本地运行,因此我的部分困惑是:VS安装主机并构建服务,找到了可供我的客户端使用的服务,但仍然对它不满意他说:)日志会很好。你关于日志文件的提示很有效。。。至少能让我深入挖掘。我使用的是不支持会话的basichttp连接。然后我查找了它,发现了如何将wshttpbinding与启用的会话连接起来。现在我的合同本身出现了错误,我认为这可能是好的,因为我的代码中仍然有自动实现的接口(抛出NotImplementedException等),所以我猜如果我正确地实现了我的合同,事情会变得更好
<connectionStrings>
  <add name="TaskModelContainer" connectionString="metadata=res://*/TaskModel.csdl|res://*/TaskModel.ssdl|res://*/TaskModel.msl;provider=System.Data.SqlClient;provider