我收到一条错误消息:
合同属性无效。根据这个值无效 其数据类型为“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" />
答案 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.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满意的答案。