根据其数据类型“clientcontracttype”,该值无效

问题描述 投票:22回答:9

我收到一条错误消息:

合同属性无效。根据其数据类型'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" />
wcf endpoint contract
9个回答
21
投票

我看到这个问题很老了,我不知道你现在是否找到了解决办法,但为了以防万一,这是我发现的将解决的问题:

1)在Solution Explorer中的Service References文件夹下,右键单击出现问题的服务引用名称,然后选择“Configure Service Reference”。

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

3)重建项目。

重建后,警告应该消失。


21
投票

我发现这个问题在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);
    }

10
投票

如果您在[包含.config]的项目中缺少对包含接口/服务合同的实际项目/库的引用,则会发生同样的错误...


3
投票

在我的情况下,我通过无意中删除了一个对服务合同关键的接口来改变了服务合同。

几周后,我发现了一个破损的客户端,其中包含过时的服务参考。由于删除接口是错误的,我把它放回去了。

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

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


1
投票

在我的情况下,我有一个命名冲突。

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

我的问题是我的项目名称是“MyServiceClient”!这引起了这场冲突。


1
投票

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


0
投票

我知道这个问题很古老,但我遇到了与C#和Visual Studio 2017相同的问题。一切正常,编译正常,然后就没有了。我将.Net 4.6.2降级到4.6,因为SQLite v108不支持108,然后我收到了这个错误和其他错误。我花了一些时间来追踪解决方案。我没有在任何地方看到我的解决方案,所以我认为我将它放在那里以备将来使用。

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

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

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


0
投票

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

  • 添加对包含所需Web服务器的项目的引用。从“项目”选项卡中执行此操作。
  • 像这样配置你的主服务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>

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.