0

Windowsサービス内で実行されているWCFサービスがあります。http://localhost/にmex-endpointがあります...

ブラウザ経由で移動できますが、MetadataResolver.Resolveを使用すると、上記の例外がスローされます(「リモートサーバーがエラーを返しました:(404)見つかりません」という内部例外を除く)。

私が見つけた唯一の違いは、ブラウザーがgetとVisualStudioの投稿を使用することです。

それを実行するにはどうすればよいですか?

ここでサーバー側:

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
    }
}

今はもっとはっきりしているといいのですが!?

4

1 に答える 1

0

ServiceHostを構成するときは、IMetadataExchangeのエンドポイントを追加しないため、WSDLを公開している間は、MEXエンドポイントを公開していません。Nicholas Allenブログから:

_serviceHost.AddServiceEndpoint(
   typeof(IMetadataExchange),
   MetadataExchangeBindings.CreateMexHttpBinding(),
   "http://localhost:8081/WindowsServiceWcf/service/mex"
);
于 2010-10-13T12:28:50.080 に答える