当我使用WCF测试客户端连接到端点时遇到问题我收到了消息
无法从http://localhost:8080/evals/basic
获取元数据我正在使用
添加端点并在代码中启动主机 private ServiceHost _serviceHost;
public ServiceHost ServiceHost
{
get { return _serviceHost?? (_serviceHost= new ServiceHost(typeof(EvalService))); }
}
public void Start()
{
ServiceHost.AddServiceEndpoint(typeof(IEvalService),
new BasicHttpBinding(),
"http://localhost:8080/evals/basic");
ServiceHost.AddServiceEndpoint(typeof(IEvalService),
new WSHttpBinding(),
"http://localhost:8080/evals/ws");
ServiceHost.AddServiceEndpoint(typeof(IEvalService),
new NetTcpBinding(),
"net.tcp://localhost:1002/evals");
ServiceHost.Open();
}
当我使用此方法检查状态时
private void ShowServiceInfo()
{
var message = String.Format("{0} is {1} with these endpoints:\n", _host.ServiceHost.Description.ServiceType, _host.ServiceHost.State);
foreach (var serviceEndpoint in _host.ServiceHost.Description.Endpoints)
{
message += "\n" + serviceEndpoint.Address;
}
MessageBox.Show(message);
}
然后我收到这条看起来好像一切正常的消息
使用这些端点打开HostService.EvalService:
http://localhost:8080/evals/basic HTTP://本地主机:8080 / evals / WS 的net.tcp://本地主机:1002 / evals
任何人都知道为什么浏览到端点不起作用?
答案 0 :(得分:2)
我看到两个问题 - 但无法验证(您没有提供必要的配置文件):
1)您似乎没有任何MEX端点 - 一个交换有关服务的元数据的端点。那些需要明确添加到您的服务主机 - 您可以拥有HTTP或Net.Tcp协议的MEX端点
2)我无法验证您是否已将服务元数据作为服务上的服务行为启用 - 通常这是通过配置(您未提供)完成的,或者您也可以在代码中添加此行为 - 但必须明确添加。
ServiceMetadataBehavior metadataBehavior;
metadataBehavior = ServiceHost.Description.Behaviors.Find<ServiceMetadataBehavior>();
if(metadataBehavior == null)
{
metadataBehavior = new ServiceMetadataBehavior();
metadataBehavior.HttpGetEnabled = true;
ServiceHost.Description.Behaviors.Add(metadataBehavior);
}
如果没有任何MEX基础架构,任何客户端都无法查询您的服务的方法和参数 - 这就是WCF测试客户端无法运行的原因。添加服务元数据行为和至少一个MEX端点,您应该没问题。