13

我正在使用 Visual Studio 2008 并且有一个 WCF 客户端针对 WCF 服务工作。它们都位于同一个 Visual Studio 解决方案中。在我对 WCF 合同进行更改后,我想更新客户端上的服务引用,以便对合同所做的更改也在代理中进行。

我的问题是代理代码没有重新生成。

当我选择更新服务参考时,会发生以下情况:

  1. 显示标题为“更新服务引用'引用名称'”的对话框。此对话框有一个进度条。
  2. 进度条移动,对话框中的状态文本更改为“更新配置”
  3. 进度条移动了一点,状态文本更改为“配置更新完成”

该对话框没有显示我期望的文本“Generating \something\”(不记得确切的措辞)。

如果我删除服务引用并再次添加它,则代理会正确生成。我使用与以前完全相同的设置添加服务,因此我认为这不是我可以通过更改客户端上的服务引用配置来解决的问题。

我怀疑的一件事可能是问题是我在 app.config 中重命名了默认的 wsHttpBindings。我还重命名了默认端点。这背后的原因是我需要多个端点,一个名为“some-default-name”的端点和一个用我自己的名字命名的端点只是令人困惑。

删除服务并再次添加它的问题是 Visual Studio 在 app.config (除其他外)中添加了一个不应该存在的新绑定。

以前有人见过这个问题吗?任何人都知道它的解决方案吗?

4

12 回答 12

8

当我们遇到此问题时,通常是以下错误之一:

  • 合同的大小已经增加,现在太大了,WCF 配置不允许它被转移。
  • 一个新类已添加到 WCF 接口,并且该类未标记为可序列化。
  • 有一个编译错误会阻止代码构建,因此它使用旧的 dll
于 2009-11-03T15:07:13.827 回答
5

我在以下条件下遇到了这个问题:

  1. 我们的工作站连接到一个 Active Directory 域(几乎所有东西都使用 Windows 身份验证)
  2. 我尝试更新的服务参考托管在 localhost 上,并且在 IIS Express 下运行(因此应用程序池用户作为开发人员的个人域用户帐户运行)
  3. 另一位开发人员比我最近添加或更新了对项目的引用。

我想出解决此问题的唯一方法是编辑该服务引用的 configuration.svcinfo 文件(您需要显示项目的所有文件才能在 Visual Studio 中查看它),找到以下部分:

userPrincipalName value="user@domain.com"

并将用户更改为我自己的域用户。保存文件后,在另一个开发人员更新服务引用之前,我更新引用没有问题(可能使用相同的解决方法)。不幸的是,我还没有找到永久解决这个问题的办法。

于 2014-02-04T17:15:21.920 回答
4

我的错误是我忘记添加 OperationContract 属性。

于 2012-07-20T15:48:46.247 回答
4

在我的情况下,问题是以前的开发人员使用他的机器名称而不是本地主机添加了服务引用。因此,当我告诉 Visual Studio 进行更新时,它连接到他的机器,而他的机器并没有发生任何变化。我修改了服务参考文件并用 localhost 替换了他的机器名称,它能够更新参考。

于 2012-10-15T21:28:43.533 回答
2

我的问题是我有两个同名的方法。一切都很好,但我无法更新服务参考。当我尝试仅启动 WCF 服务时,会弹出错误。

于 2011-08-11T11:03:27.827 回答
1

将服务突出显示为活动项目,按 F5 在 VisualStudio 中运行它,它将在服务测试应用程序中启动。停止调试。然后尝试更新您的服务参考 - 为我工作。

于 2014-10-07T11:32:00.607 回答
1

两个简单的步骤来解决这个问题:

  1. 运行服务,然后停止它。

  2. 更新服务参考。

于 2014-11-06T21:18:38.400 回答
1

我也有这个问题。删除服务引用并重新创建它。

于 2014-11-20T08:50:56.930 回答
0

我知道这个解决方案有点晚了,但是在尝试发布的解决方案没有成功之后,这个解决方案有效:

创建 WebService 时,它​​会生成一个 .dll 文件,您可以将其作为服务参考。每次更改 .SVC 文件时,都不会重新创建此 .dll(众所周知)。如果你去查看 web 服务 .dll 文件的日期修改属性,你可以看到这一点,在我的例子中,它是三个小时前的!

我的解决方案是对服务联系人进行适当的更改,保存它,然后重新构建项目,这将导致它重新创建所有 .dll,以反映您对服务联系人文件 (.svc) 所做的更改。

在此之后,更新客户端应用程序上的服务引用,并且更改是显而易见的。

  • 黑桃
于 2014-06-18T01:59:25.230 回答
0

我有同样的问题。修改了部分数据合约。尝试“更新服务参考”并没有看到变化。删除并重新添加服务。在客户端编写代码时仍然没有看到变化。用 Reflector 打开我的客户端,发现服务类型发生了变化!那么为什么智能感知仍然显示旧属性?重新启动 Visual Studio,修改最终显示在智能感知中。

于 2015-05-27T18:03:42.550 回答
0

我遇到了同样的问题,这是由 GIT 合并冲突引起的,我的 csproj 文件中缺少以下代码

   <ItemGroup>
    <None Include="Service References\<SERVICE NAME>\Reference.svcmap">
      <Generator>WCF Proxy Generator</Generator>
      <LastGenOutput>Reference.cs</LastGenOutput>
    </None>
  </ItemGroup>

我已经在 Reference.svcmap 行添加了这个

于 2015-11-09T10:20:50.030 回答
0

此类问题的另一个解决方案是,如果您的命名空间在都使用服务的引用项目中变得混乱。所以:

ProjectA - 使用 ServiceA

ProjectB - 使用 ServiceA,引用 ProjectA

如果您更改 ServiceA 并更新 ProjectB,有时命名空间可以更改以查看 ProjectA 的服务版本。

于 2016-01-07T19:29:25.280 回答