2011-08-04 110 views
1

我有一个问题,当我连接到使用WCF测试客户端我得到的消息端点404错误托管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: // localhost:1002/evals

任何人都知道为什么浏览到端点将无法工作?

+0

权限?尝试作为管理员运行你的应用程序?我注意到应用程序不能互相沟通,除非允许端点(忘记如何)或者以管理员身份运行应用程序。也许在单个应用程序中是一样的。 –

+0

只是因为我没有UAC打开而启用UAC时才会这样。另外当我尝试通过App.config配置端点时,我得到此异常 --------------------------- System.InvalidOperationException:Service 'HostService.EvalService'具有零应用程序(非基础设施)端点。这可能是因为没有为您的应用程序找到配置文件,或者因为在配置文件中找不到匹配服务名称的服务元素,或者因为服务元素中没有定义端点。 –

+0

如果我将启动项目设置为我的WCF项目,那么我在WCF服务主机中得到此异常 System.InvalidOperationException:ServiceMetadataBehavior的HttpGetEnabled属性设置为true,并且HttpGetUrl属性是相对地址,但没有http基地址。提供http基地址或将HttpGetUrl设置为绝对地址。 –

回答

2

我看到两个问题 - 但无法核实这些(你没有提供必要的配置文件):

1)你似乎没有任何MEX端点 - 端点交换有关的元数据服务。那些需要明确地添加到你的服务主机 - 你可以拥有MEX终端的HTTP或Net.Tcp协议

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

+0

好吧,我认为这是正确的方向,那么每个服务都需要有一个mex端点? –

+0

@Nitro52:如果你想要“可发现性” - 是的,这需要MEX,因此MEX服务行为和MEX端点。这样的服务在没有MEX的情况下可以正常工作 - 但是你不能“发现”并且要求它采用其方法等。 –

+0

我有mex终端添加,仍然不工作..检查我的帖子与所有相关的代码在这里... http://stackoverflow.com/questions/7192877/selfhosted-wcf-service-cant-be-tested-via -wcftestclient – user20358