关于通过ServiceHostFactory扩展wcf的问题???

qingYun1029 qingYun1029 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
在学习wcf,由于项目中通过实现ServiceHostFactory发布的wcf接口——项目中使用UnityServiceHostFactory,我想跳过这个组件,于是用了ServiceHostFactory,

创建一个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。
...全文

相关推荐

评论 6
收藏 已收藏
分享
返回顶部
qingYun1029
.NET社区 62,271 成员 668,968 内容