【问题标题】:WCF service operations not updatedWCF 服务操作未更新
【发布时间】:2017-12-19 22:34:29
【问题描述】:

我正在创建一个新的 WCF 服务。我最初只有三个手术。但过了一段时间,我决定再添加两个。当我尝试从我的 WPF 客户端添加服务引用时,此操作不会出现在 Microsoft 测试客户端中,也不会出现在操作列表中。我还尝试评论其中一项初始操作。它仍然出现在 Microsoft 测试客户端中并且可以调用。我也试过删除服务生成的dll并重新生成。没运气。有某种“缓存”,Visual Studio 存储了我可以删除的 WCF 服务库?

更新:我正在使用在 ASP.NET 开发服务器中运行的服务。

【问题讨论】:

    标签: wcf


    【解决方案1】:

    你需要了解事情发生的顺序。

    1. 您更改代码,添加带有[OperationContract] 的方法,或者删除它们,或者更改它们的参数或返回值。
    2. 然后您必须构建您的服务,生成包含更改的 .DLL。
    3. 然后您必须部署已更改的 DLL 到要运行它的服务器
    4. 然后您必须重新启动服务(这可能会根据服务器自动发生。例如,当 IIS 发现 DLL 发生更改时,它会回收服务)
    5. 然后您必须更新您的客户端,WCF 测试客户端或“添加服务引用”或等效项。

    最后一个将具有向服务发送请求以获取新元数据或 WSDL 的效果。只有那么客户端才能看到您对服务定义所做的更改。

    【讨论】:

    • 同样的问题,在去stackoverflow之前都做了几次,无济于事
    • 就我而言,我的主机网站项目没有加载到我的解决方案中,因为 Visual Studio 没有管理员权限。一旦我以管理员身份关闭并打开 VS,并构建,操作更新没有任何问题。
    【解决方案2】:

    我不知道为什么,但是我创建了一个新项目并从有问题的项目中复制了操作的定义,问题就消失了。微软之谜还有一个案例。

    【讨论】:

    • 我不会将此称为“微软之谜”。我称之为“您没有了解问题所在,而是解决了它”。特别是,您通过创建一个新项目完成的一件事是您启动了一个新的开发服务器实例,该实例运行已更改的代码。重新启动原始服务器可能已经解决了问题。
    • 我也试过重启 ASP.NET 开发服务器,但生成的代码仍然是非同步生成的。好吧,我想如果我比较整个项目会发现一些不同的东西,但坦率地说,我没有时间。
    • 我遇到了同样的问题(操作没有出现在生成的客户端中)并且至少找到了一个可靠的原因/结果。我的服务操作用 [FaultContract] 属性装饰。当我删除这些属性时,客户端已正确生成。我不确定我的 FaultContract 实现是否有问题,或者服务引用生成器是否根本不喜欢该属性。我在生成客户端后恢复了属性,一切都按预期工作。
    • 我也遇到了同样的问题。我真的不能创建一个新项目,还有其他想法吗?
    【解决方案3】:

    确保在添加新操作后更新服务。

    还要确保它们具有[OperationContract] 属性。

    【讨论】:

      【解决方案4】:

      我们发现的一件事是,当您部署 dll 时,它们必须在 bin 中,并且不能驻留在 debug 或 release 文件夹中。

      【讨论】:

        【解决方案5】:

        对我来说工作:只需重建 wcf 项目

        【讨论】:

          【解决方案6】:

          您是否在客户端关闭了客户端连接 显示您的服务

          class Test
              {
                  static void Main()
                  {
                      LocationClient client = new LocationClient();
          
                      // Use the 'client' variable to call operations on the service.
          
                      // Always close the client.
                      client.Close();
                  }
              }
          

          【讨论】:

            【解决方案7】:

            这里的解决方案:

            确保您的 dataContract 不包含任何枚举 (你可以用整数代替)

            请务必在解决方案中引用项目,而不是磁盘上的 dll

            1. 删除“bin”和“obj”文件夹
            2. 重新编译
            3. 在 IIS 中回收应用程序池
            4. 在 IIS 中重新启动您的服务
            5. 在 IIS 中“浏览”您的服务

            => 你明白了

            【讨论】:

              猜你喜欢
              • 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
              相关资源
              最近更新 更多