代码之家  ›  专栏  ›  技术社区  ›  Papa Mufflon

在<urltomex>处没有可接受消息的侦听终结点。

  •  0
  • Papa Mufflon  · 技术社区  · 14 年前

    我有一个在Windows服务中运行的WCF服务。在处有一个MEX终结点 http://localhost/

    我可以通过浏览器导航到它,但是如果我使用metadataresolver.resolve,上面提到的异常将被抛出(内部异常为“远程服务器返回了一个错误:(404)未找到。”)。

    我发现的唯一区别是,浏览器使用了get和Visual Studio。

    我该怎么办才能跑?

    这里是服务器端:

    protected override void OnStart(string[] args) {
        _serviceHost = new ServiceHost(new TestService());
        var binding = new WSHttpBinding();
        _serviceHost.AddServiceEndpoint(typeof(ITestService),
                                        binding,
                                        "http://localhost:8081/WindowsServiceWcf/service");
        _serviceHost.Open();
    }
    

    这里是配置:

    <system.serviceModel>
      <services>
        <service name="WindowsServiceWcf.TestService" behaviorConfiguration="MexGet" />
      </services>
      <behaviors>
        <serviceBehaviors>
          <behavior name="MexGet">
            <serviceMetadata httpGetEnabled="true" httpGetUrl="http://localhost/WindowsServiceWcf/service/TestServiceMexAddress" />
          </behavior>
        </serviceBehaviors>
      </behaviors>
    </system.serviceModel>
    

    这里是客户端:

    private void SetUpService() {
        var mexUri = new Uri("http://localhost/WindowsServiceWcf/service/TestServiceMexAddress");
        var metaAddress = new EndpointAddress(mexUri);
    
        try {
            var endpoints = MetadataResolver.Resolve(typeof(TestService), metaAddress);
        } catch (Exception) {
            // above mentioned exception
        }
    }
    

    希望,现在更清楚了!?

    1 回复  |  直到 14 年前
        1
  •  0
  •   tomasr    14 年前

    配置ServiceHost时,不会为IMetadataExchange添加端点,因此在公开WSDL时,不会公开MEX端点。从 Nicholas Allen blog :

    _serviceHost.AddServiceEndpoint(
       typeof(IMetadataExchange),
       MetadataExchangeBindings.CreateMexHttpBinding(),
       "http://localhost:8081/WindowsServiceWcf/service/mex"
    );