Я создал службу WCF, но во время работы службы я получаю сообщение об ошибке ниже: Ошибка:
Не удалось добавить службу.Метаданные службы могут быть недоступны.Убедитесь, что ваша служба работает и предоставляет метаданные.
Сведения об ошибке:
Предупреждение: код не был создан. Если вы пытались сгенерировать клиента, это может быть связано с тем, что в документах метаданных не было никаких действующих контрактов или служб илипотому что все контракты / услуги были обнаружены в / справочных сборках.Убедитесь, что вы передали все документы метаданных в инструмент. Предупреждение: Если вы хотите создавать контракты данных из схем, обязательно используйте параметр / 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>
Любая подсказка, где я иду не так?
РЕДАКТИРОВАТЬ:Я думаю, что причина ошибки заключается в том, что я использую класс в качестве контракта на обслуживание, теперь, когда я изменяю его на интерфейс, все работает, как ожидалось, не знаю, почему я получаю ошибку, если я указываю класс в качестве контракта на обслуживание.