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

时间:2013-03-19 10:50:24

标签: wcf endpoint contract

我收到一条错误消息:

  

合同属性无效。根据这个值无效   其数据类型为“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" />

9 个答案:

答案 0 :(得分:20)

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

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

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

3)重建项目。

重建后,警告应该消失。

答案 1 :(得分:20)

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

答案 2 :(得分:10)

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

答案 3 :(得分:3)

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

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

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

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

答案 4 :(得分:1)

就我而言,我有一个命名冲突。

当您添加服务引用时,visual studio会生成一个客户端类作为实现合同的代理,该代理的默认名称是&#34;客户端&#34;附加的服务的名称。所以如果您的服务是&#34; MyService&#34;客户端类将是&#34; MyServiceClient&#34;。

我的问题是我的项目名称是&#34; MyServiceClient&#34; !这引起了这场冲突。

答案 5 :(得分:1)

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

答案 6 :(得分:0)

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

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

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

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

答案 7 :(得分: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>
    

答案 8 :(得分:0)

在我的情况下,代码是正确的,接口具有正确的[ServiceContract]标记,.config端点具有正确的接口名称空间,但是带有接口的项目需要重新编译,以便其他项目具有.config文件的文件将在其bin文件夹中获取第一个项目的最新.dll。因此,重新编译代码是使Visual Studio满意的答案。