浏览到自托管WCF服务的端点时出现404错误

时间:2011-08-04 05:46:57

标签: wcf

当我使用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

任何人都知道为什么浏览到端点不起作用?

1 个答案:

答案 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端点,您应该没问题。