我试图允许用户配置 WCF 服务,包括该服务侦听的 IP 和端口号。用户有一个单独的配置应用程序,允许设置这些值,但我遇到的问题是 app.config 必须定义一个端点才能创建新的 ServiceHost 条目...但我的端点正在被在单独的配置文件中定义,然后必须在运行时以编程方式绑定。
如果我执行以下操作(基于如何以编程方式修改 WCF app.config 端点地址设置? https://stackoverflow.com/questions/966323/how-to-programatically-modify-wcf-app-config-endpoint-address-setting:
m_SvcHost = new ServiceHost(this);
if (Config.ServiceEndpoint != null && Config.ServiceEndpoint != String.Empty)
{
m_SvcHost.AddServiceEndpoint(typeof(IMyService),
new BasicHttpBinding(),
Config.ServiceEndpoint);
}
m_SvcHost.Open();
该服务将侦听 app.config 中定义的 URI 和配置文件中定义的 URI。我无法找到删除原始端点或在未定义端点的情况下创建服务的方法。
从配置应用程序写入 app.config 不是一个选项 - 我需要以编程方式从单独的 XML 配置文件中提取配置的值......
有什么想法吗?
编辑:该服务作为 Windows 服务运行并公开 HTTP 端点,它不是作为 IIS 中托管的 Web 服务运行 - 如果这会改变一切
Justin,
这对你有帮助吗?此代码将允许您响应您在 CreateServiceHost() 方法中列出的任何地址。
public class CRSyncServiceHost : ServiceHost
{
public CRSyncServiceHost(Type serviceType, params Uri[] baseAddresses) : base(serviceType, baseAddresses) { }
protected override void ApplyConfiguration()
{
base.ApplyConfiguration();
}
}
public class CRSyncServiceFactory : ServiceHostFactory
{
protected override System.ServiceModel.ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
{
Uri newServiceAddress = new Uri("http://someaddress.com/CRSyncService.svc");
CRSyncServiceHost newHost = new CRSyncServiceHost(serviceType, newServiceAddress);
return newHost;
}
}
<%@ ServiceHost Language="C#" Debug="true" Service="CRSyncService" Factory="CRSyncServiceFactory" CodeBehind="CRSyncService.svc.cs" %>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)