在此服务主机的已实施合同中未找到合同

Posted

技术标签:

【中文标题】在此服务主机的已实施合同中未找到合同【英文标题】:Contract was not found in the implemented contracts in this service host 【发布时间】:2012-04-07 09:32:49 【问题描述】:

我收到了标题中提到的错误,但不确定我到底做错了什么。我在 openSUSE 上运行 Mono 2.10.6。仅当我尝试浏览 WCF 服务时才会出现此问题(网页加载正常)。

服务代码是:

namespace CyberLane

    [ServiceContract]
    public class DataServices// : IDataServices
    
        [OperationContract]
        public TweetDTO[] GetLatestTweets()
        
            return MasterRepository.GetTweets().Select(x => new TweetDTO(x)).ToArray();
        
    

我的 Web.config 有以下内容:

<system.serviceModel>
    <behaviors>
        <endpointBehaviors>
            <behavior name="CyberLane.DataServicesAspNetAjaxBehavior">
                 <enableWebScript />
            </behavior>
        </endpointBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
    <services>
        <service name="CyberLane.DataServices">
            <endpoint address="" behaviorConfiguration="CyberLane.DataServicesAspNetAjaxBehavior" binding="webHttpBinding" contract="CyberLane.DataServices" />
        </service>
    </services>
</system.serviceModel>

如果您需要更多信息,请询问我,我将非常乐意分享!这已经让我发疯了几个星期了。

【问题讨论】:

【参考方案1】:

首先,最佳实践和常用方法是使用 ServiceModel 属性而不是实现它的类来装饰 IDataServices(接口)。

【讨论】:

我最初是这样的,但收到此错误“在此服务主机的已实施合同中找不到合同'Cyber​​Lane.IDataServices'”所以我在没有接口的情况下尝试了它并得到了相同的结果错误。 @JustinN:我建议回滚,我的意思是使用接口。这将避免额外的问题。还要确保您输入正确,WCF 在任何地方都区分大小写。 我已回滚,但仍然出现错误。我是否需要做其他事情才能让它将接口识别为属性以外的合同? @JustinN:WCF 程序集是 Web 应用程序外部的吗?如果是 - 你有没有引用它?确保在合同激活时加载。 都在同一个项目中。

以上是关于在此服务主机的已实施合同中未找到合同的主要内容,如果未能解决你的问题,请参考以下文章

具有多个合同的 Mono WCF 休息服务“配置文件中未定义端点”

IMetadataExchange 的合同属性无效

Android:片段在活动结果合同中未收到 RESULT_OK

找不到 WCF 合同名称“IMyService”?

版本化服务合同后无法访问 WCF 服务

如何做好工程合同中的变更管理