创建一个wcf项目,然后删除相关的.svc文件,自定义类WcfServiceFactory:如下
public class WcfServiceFactory : ServiceHostFactory
{
protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
{
ServiceHost host = new ServiceHost(serviceType, baseAddresses);
foreach (Uri address in baseAddresses)
{
//WSHttpBinding b = new WSHttpBinding(SecurityMode.Message);
BasicHttpBinding b = new BasicHttpBinding();
b.Name = serviceType.Name;
host.AddServiceEndpoint(serviceType.GetInterfaces()[0], b, address);
}
return host;
}
定义ICompany接口:
[ServiceContract]
public interface ICompany
{
[OperationContract]
IEnumerable<Company> GetAllCompanies();
}
接口实现类:
public class CompanyService : ICompany
{
public IEnumerable<Company> GetAllCompanies()
{
return new List<Company>()
{
new Company{ CompanyId = 1, CompanyName ="company 1", Email="company1@126.com"},
new Company{CompanyId = 2, CompanyName = "company 2", Email="company2@126.com"}
};
}
}
模型类:
[DataContract]
public class Company
{
[DataMember]
public int CompanyId { get; set; }
[DataMember]
public string CompanyName { get;set;}
[DataMember]
public string Email { get;set;}
}
配置文件:
<system.serviceModel>
<!--省略部分-->
<services>
<!--<service name="WcfService.User">
<endpoint address="" binding="basicHttpBinding" contract="WcfService.IUser" />
</service>-->
<service name="WcfService.CompanyService">
<endpoint address="http://localhost:5166/Company" binding="basicHttpBinding" contract="WcfService.ICompany" />
</service>
</services>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true">
<serviceActivations>
<add factory="WcfService.Services.WcfServiceFactory" service="WcfService.CompanyService" relativeAddress="Company.svc" />
</serviceActivations>
</serviceHostingEnvironment>
</system.serviceModel>
错误信息:
如果在配置中将“system.serviceModel/serviceHostingEnvironment/multipleSiteBindingsEnabled”设置为 true,则需要终结点指定相对地址。如果在终结点上指定相对侦听 URI,则该地址可以是绝对地址。若要解决此问题,请为终结点“http://localhost:5166/Company”指定相对 URI。