Не было прослушивания конечной точки на <urlToMex>, которая могла бы принять сообщение - PullRequest
0 голосов
/ 13 октября 2010

У меня есть служба WCF, работающая внутри службы Windows.Существует мекс-конечная точка на http://localhost/...

. Я могу перейти к ней через браузер, но если я использую MetadataResolver.Resolve, вышеупомянутое исключение будет выдано (с внутренним исключением "Удаленный сервер возвратилerror: (404) Not Found. ").

Единственное отличие, которое я заметил, заключается в том, что браузер использует 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 Ответ

0 голосов
/ 13 октября 2010

Когда вы настраиваете свой ServiceHost, вы не добавляете конечную точку для IMetadataExchange, поэтому, пока вы предоставляете WSDL, вы не предоставляете конечную точку MEX. От Блог Николаса Аллена :

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