目标程序集不包含任何服务类型。您可能需要调整此程序集的代码访问安全性策略

时间:2012-11-29 12:47:11

标签: c# wcf

我有一个带有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)
{
    ...
}

我应该在哪个配置文件中添加 - 如果这确实是问题?

[UPDATE]

好的,只是为了重新迭代: 我在1个解决方案中有2个项目。 1个项目包含合同,另一个项目包含实施代码。

这也意味着有2个配置文件。到目前为止,我不知道哪一个需要以什么方式进行修改。

那么,哪一个要修改,还是我需要修改它们?我假设实现项目是WCF配置的项目。

我现在处于这样的情况:当我构建它时说我没有公开元数据,但它也尝试(并且失败)将合同公开为端点!

[/ UPDATE]

4 个答案:

答案 0 :(得分:2)

我得到了同样的错误,因为我错误地评论了[ServiceContract] attibute。一旦我取消注释[ServiceContract]属性,它一切正常。

我希望这可以帮助那些面临同样问题的人。

答案 1 :(得分:1)

修改

<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查看详细信息:Random Error Message: WCF Service Host cannot find any service metadata

答案 2 :(得分:1)

我遇到了这个错误,事实证明我的启动项目是错误的项目:这是我第一次看到这个错误,但是很好。

答案 3 :(得分:1)

我刚碰过这个。在我的例子中,我有三个程序集:一个用于服务,一个用于客户端,一个类库由前两个共享。共享程序集项目有一个由VS自动创建的app.config文件。删除该文件解决了问题。