运行Service时出错

时间:2010-10-02 16:32:03

标签: wcf

我已经创建了WCF服务,但在运行服务时我收到以下错误: 错误:

  

无法添加服务。服务   可能无法访问元数据。使   确保您的服务正在运行   暴露元数据。
  错误详情:
  警告:没有生成代码。如果你   我试图生成一个客户端   可能是因为元数据   文件没有任何有效的   合同或服务,因为所有   合同/服务被发现   存在于/ reference程序集中。校验   您传递了所有元数据   文件到工具。警告:如果你   想生成数据合同   从架构确保使用   / dataContractOnly选项。

代码:

namespace WCFTest
{
    [ServiceContract]
    public class EmployeeDetails
    {
        [OperationContract]
        public List<Employee> GetDetails()
        {
            List<Employee> emp = new List<Employee>()
            {
               new Employee(){Fname="AA",Lname="BB",EmpId=1,Desg="A"},
               new Employee(){Fname="CC",Lname="DD",EmpId=1,Desg="B"},
               new Employee(){Fname="EE",Lname="FF",EmpId=1,Desg="C"},
               new Employee(){Fname="GG",Lname="HH",EmpId=1,Desg="D"},
               new Employee(){Fname="II",Lname="JJ",EmpId=1,Desg="A"},
               new Employee(){Fname="KK",Lname="LL",EmpId=1,Desg="B"}
            };
            return emp;
        }
    }

    // Use a data contract as illustrated in the sample below to add composite types to service operations.
    [DataContract]
    [KnownType(typeof(Employee))]
    public class Person
    {
        [DataMember]
        public string Fname { get; set; }
        [DataMember]
        public string Lname { get; set; }
    }

    [DataContract]
    public class Employee : Person
    {
        [DataMember]
        public int EmpId { get; set; }
        [DataMember]
        public string Desg { get; set; }
    }
}

namespace WCFTest
{
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Service1" in code, svc and config file together.
    public class Service1
    {
        public List<Employee> GetData(int value)
        {
            EmployeeDetails ed = new EmployeeDetails();
            return ed.GetDetails();
        }
    }
}

但是我可以在web.config中看到元数据。

的Web.config:

<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
          <serviceMetadata httpGetEnabled="true"/>
          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
 <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>
</configuration>

我出错的任何线索?

编辑:我认为错误背后的原因是我使用类作为服务合同,现在当我将其更改为接口时,事情按预期工作,不确定为什么我收到错误如果我指定作为服务合同的阶级。

1 个答案:

答案 0 :(得分:1)

我的配置中没有看到任何<services>节点 - 您根本没有配置服务 - 所以没有任何东西可以连接。

您需要扩展您的配置以包含以下内容:

<configuration>
  <system.serviceModel>

    <services>
      <service name="WCFTest.EmployeeDetails">
         <endpoint name="Default" 
                   address="/default"
                   binding="basicHttpBinding" bindingConfiguration=""
                   contract="WCFTest.EmployeeDetails" />
         <endpoint kind="mexEndpoint" address="/mex" />
      </service>
    </services>

  </system.serviceModel>
</configuration>

现在,您拥有服务和元数据端点的服务,现在您的WCF测试客户端应该能够找到要连接的内容....