28

我收到一条错误消息:

合同属性无效。根据其数据类型“clientcontracttype”,该值无效

以下是此 WCF 应用程序的 web.config 中的端点配置。我正在使用 .NET Framework 4.5 和 Visual Studio 2012。我已经验证合同OnlineReporting.Core.Contracts.IReportingInternalWcfPortal已经存在。

<endpoint address="http://localhost:63817/ReportingInternalWcfPortal.svc" 
          binding="basicHttpBinding" 
          bindingConfiguration="BasicHttpBinding" 
          contract="OnlineReporting.Core.Contracts.IReportingInternalWcfPortal" 
          name="ReportingInternalPortal" />
4

9 回答 9

24

我看到这个问题已经很老了,我不知道您现在是否找到了解决方案,但以防万一,这就是我发现的解决方案:

1) 在解决方案资源管理器中,在服务引用文件夹下,右键单击有问题的服务引用名称,然后选择“配置服务引用”。

2) 将出现服务参考设置窗口。取消选中标有“在引用的程序集中重用类型”的框,然后单击“确定”按钮。

3) 重建项目。

重建后,警告应该消失。

于 2014-01-07T21:17:23.120 回答
23

我发现这个问题在 Web 服务项目上寻找相同的错误。

就我而言,当我忘记在界面上添加[ServiceContract]属性时发生此错误。IServiceBase

一旦我在错误中添加它就消失了。

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;

namespace MyService
{
    [ServiceContract]
    public interface IServiceBase
    {
        [OperationContract]
        IEnumerable<ListItem> GetListItems();

        [OperationContract]
        void SaveListItems(IEnumerable<ListItem> listItems);
    }
于 2014-09-30T19:50:06.950 回答
13

当您缺少 [in the project with the .config] 对包含接口/服务合同的实际项目/库的引用时,也会发生同样的错误......

于 2017-08-29T09:09:24.267 回答
3

就我而言,我通过无意中删除了对服务合同至关重要的接口来更改服务合同。

几周后,我发现了一个损坏的客户,其服务参考已过时。由于删除接口是错误的,我将其放回原处。

另一种可能的解决方案是重建服务引用以匹配新的服务合同(在我的情况下,由于引用的接口已被删除,因此会破坏项目构建)。

感谢 OrangeKing89 为我指明了正确的方向。我知道服务合同有可能被改变。

于 2016-02-02T02:09:24.140 回答
1

就我而言,我遇到了命名冲突。

当您添加服务引用时,Visual Studio 会生成一个客户端类作为实现合同的代理,该代理的默认名称是附加“Client”的服务名称,因此如果您的服务是“MyService”,则客户端类将是“我的服务客户端”。

我的问题是我的项目名称是“MyServiceClient”!这导致了这个冲突。

于 2014-06-13T05:53:22.277 回答
1

我意识到这是一个旧线程,但在我的情况下,问题是有人曾经向项目添加了服务引用,然后决定采取另一条路线,但该条目仍保留在 web.config 中,所以只需删除 web.config 中的那个条目为我解决了这个问题。

于 2016-08-18T19:05:45.500 回答
0

我知道这个问题很古老,但是我在 C# 和 Visual Studio 2017 中遇到了同样的问题。一切正常,编译正常,但事实并非如此。我从 .Net 4.6.2 降级到 4.6,因为 SQLite v108 不支持 108,然后我收到了这个错误和其他错误。我花了一些时间来寻找解决方案。我没有在任何地方看到我的解决方案,所以我想我把它放在那里以备不时之需。

我删除了我的服务引用,签入了我对 TFS 的所有更改,然后重新添加了服务引用。然后我构建了解决方案,一切都很好。

我检查了 app.config 和其他文件,一切似乎都很好,只是没有构建。显然,VS2017 在某处引入了 .Net 版本信息,但并不明显。

希望我的解决方案可以帮助某人。

于 2018-07-26T19:41:40.953 回答
0

如果这两个服务都包含在同一个解决方案中,您只需执行两个操作,前提是这两个服务都在工作。

  • 添加对包含您需要的网络服务器的项目的引用。从“项目”选项卡中执行此操作。
  • 像这样配置您的主要服务 web.config:

    <services>
      <service name="MyCurrentProject.Service" behaviorConfiguration="ConfigRest">
        <endpoint address="" behaviorConfiguration="web" binding="webHttpBinding" bindingConfiguration="restServicehttp" name="RestEndpoint" bindingName="webHttpBinding" contract="MyCurrentProject.Service"/>
      </service>
      <service name="AnotherPoject.Service" behaviorConfiguration="ConfigRest">
        <endpoint address="" behaviorConfiguration="web" binding="webHttpBinding" bindingConfiguration="restServicehttp" name="RestEndpoint" bindingName="webHttpBinding" contract="AnotherPoject.Service"/>
      </service>
    

于 2019-03-27T17:22:00.873 回答
0

在我的情况下,代码是正确的,接口具有正确的 [ServiceContract] 标签,并且 .config 端点具有正确的接口命名空间,但是需要重新编译具有接口的项目,以便具有.config 文件将在其 bin 文件夹中获取第一个项目的最新 .dll。所以重新编译代码是让visual studio满意的答案。

于 2019-04-05T20:57:34.797 回答