更新服务引用不起作用

时间:2009-11-03 08:34:43

标签: wcf proxy service-reference

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

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

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

  1. 显示标题为“正在更新服务引用'参考名称'”的对话框。该对话框有一个进度条。
  2. 进度条移动,对话框中的状态文本更改为“正在更新配置”
  3. 进度条移动了一点,状态文本被更新为“配置更新完成”
  4. 对话框没有显示我正在加速的文字“Generating \ something \”(不记得确切的措辞)。

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

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

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

    之前有人见过这个问题吗?有谁知道它的解决方案?

12 个答案:

答案 0 :(得分:6)

当我们遇到这个问题时,通常会出现以下错误之一:

  • 合同的大小已经增加,现在已经很大,以至于WCF配置不允许转移。
  • 已将一个新类添加到WCF接口,该类未标记为可序列化。
  • 存在编译错误,导致代码停止生成,因此使用旧的dll

答案 1 :(得分:5)

我遇到以下情况时遇到此问题:

  1. 我们的工作站已连接到Active Directory域(几乎所有内容都使用Windows身份验证)
  2. 我正在尝试更新的服务引用托管在localhost上,并且在IIS Express下运行(因此应用程序池用户作为开发人员的个人域用户帐户运行)
  3. 另一位开发人员最近添加或更新了对项目的引用。
  4. 我弄清楚如何解决此问题的唯一方法是编辑该服务引用的configuration.svcinfo文件(您需要显示项目的所有文件才能在visual studio中查看),找到以下部分:

    userPrincipalName value="user@domain.com"
    

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

答案 2 :(得分:3)

在我的情况下,问题是前一个开发人员使用他的机器名而不是localhost添加了服务引用。因此,当我告诉Visual Studio更新时,它连接到他的机器,它没有更改。我修改了服务引用文件并用localhost替换了他的机器名,它能够更新引用。

答案 3 :(得分:2)

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

答案 4 :(得分:1)

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

答案 5 :(得分:1)

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

答案 6 :(得分:1)

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

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

  2. 更新服务参考。

答案 7 :(得分:1)

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

答案 8 :(得分:0)

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

创建WebService时,它会生成一个.dll文件,您引用该文件作为服务引用。每次更改.SVC文件时,都不会重新创建此.dll(最知道)。如果你去查看web服务.dll文件的日期修改属性,你可以看到这个,在我的情况下它是三个小时!

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

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

  • 黑桃

答案 9 :(得分:0)

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

答案 10 :(得分:0)

我遇到了同样的问题,我这是由GIT Merge Conflict引起的,我在csproj文件中缺少以下代码

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

我在Reference.svcmap

行添加了这个

答案 11 :(得分:0)

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

ProjectA - 使用ServiceA

ProjectB - 使用ServiceA,参考ProjectA

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