我有一个带有2个方法的小型WCF解决方案,但在构建它时遇到了这个错误。
如果我不理会留言,我就会收到
WCF Service Host cannot find any service metadata. This may cause the client application to run improperly. Please check if metadata is enabled.
我很确定我的配置是错误的,可能定义的端点与命名空间不匹配,但我不确定在哪里设置什么。
Contracts类的名称空间是JOB_1_0_Service.Contracts
,包含2个方法。在本项目的APP.Config
中如下:
<endpoint address="/Address1" binding="wsHttpBinding" contract="JOB_1_0_Service.Contracts.IService">
合同方法定义为:
[ServiceContract]
public interface IService
{
[OperationContract]
GetNearbyJobsResponse GetNearbyJobs(GetNearbyJobsRequest request);
[OperationContract]
GetChildJobsResponse GetChildJobs(GetChildJobsRequest request);
}
实现类的名称空间再次是JOB_1_0_Service.Implementation
,有两个方法:
GetNearbyJobsResponse IService.GetNearbyJobs(GetNearbyJobsRequest request)
{
...
}
和
GetChildJobsResponse IService.GetChildJobs(GetChildJobsRequest request)
{
...
}
如果确实存在问题,我应该在哪个配置文件中放什么?
[更新]
好的,所以只需要重新迭代:我在一个解决方案中有两个项目。一个项目包含合同,另一个项目有实现代码。
这也意味着有2个配置文件。到目前为止,我不知道哪一个需要以什么方式进行修改。
那么,哪个是要修改的,还是我需要同时修改两者?我假设实现项目是WCF配置的项目。
我现在的情况是,当我构建它时,它说我没有公开元数据,但它也试图(但失败了)将合同作为端点公开!
[/UPDATE]
我得到了同样的错误,因为我错误地注释掉了[ServiceContract]属性。一旦我取消了[ServiceContract]属性的注释,一切都正常。
我希望这能帮助其他面临同样问题的人。
编辑
将<serviceMetadata/>
元素添加到元数据的服务行为中
<configuration>
<system.serviceModel>
<services>
<service name="WCFTest.Service1" behaviorConfiguration="Simplebehavior">
<host>
<baseAddresses>
<add baseAddress="http://localhost:8000/WCFTest/"/>
</baseAddresses>
</host>
<endpoint
address=""
binding="basicHttpBinding"
contract="WCFTest.IService1"/>
<endpoint
address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="Simplebehavior">
<serviceMetadata/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
添加以下端点以交换元数据
<endpoint
address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
Aslo检查详细信息:随机错误消息:WCF服务主机找不到任何服务元数据
我有这个错误,结果发现我的启动项目是错误的:这是我第一次看到这个错误,但哦,好吧。
我刚刚遇到了这个。在我的例子中,我有三个程序集:一个用于服务,一个用于客户端,还有一个由前两个共享的类库。共享程序集项目有一个由VS自动创建的app.config文件。删除该文件解决了此问题。