0

我创建了一个非常简单的 WCF 服务,但由于某种原因,我遇到了svcutil. 我正在使用以下命令:

svcutil http://localhost:8098/IceVSServer/service?wsdl

我得到以下输出:

Microsoft (R) Service Model Metadata Tool
[Microsoft (R) Windows (R) Communication Foundation, Version 4.0.30319.1]
Copyright (c) Microsoft Corporation.  All rights reserved.

Attempting to download metadata from 'http://localhost:8098/IceVsServer/service?wsdl' using WS-Metadata Exchange or DISCO.
Microsoft (R) Service Model Metadata Tool
[Microsoft (R) Windows (R) Communication Foundation, Version 4.0.30319.1]
Copyright (c) Microsoft Corporation.  All rights reserved.

Error: Cannot obtain Metadata from http://localhost:8098/IceVsServer/service?wsdl

If this is a Windows (R) Communication Foundation service to which you have acce
ss, please check that you have enabled metadata publishing at the specified addr
ess.  For help enabling metadata publishing, please refer to the MSDN documentat
ion at http://go.microsoft.com/fwlink/?LinkId=65455.


WS-Metadata Exchange Error
    URI: http://localhost:8098/IceVsServer/service?wsdl

    Metadata contains a reference that cannot be resolved: 'http://localhost:8098/IceVsServer/service?wsdl'.

There was no endpoint listening at http://localhost:8098/IceVsServer/service
?wsdl that could accept the message. This is often caused by an incorrect addres
s or SOAP action. See InnerException, if present, for more details.

The remote server returned an error: (404) Not Found.


HTTP GET Error
    URI: http://localhost:8098/IceVsServer/service?wsdl

There was an error downloading 'http://localhost:8098/IceVsServer/service?wsdl'.

The request failed with HTTP status 404: Not Found.

If you would like more help, type "svcutil /?"

该错误似乎表明我没有 MEX 端点。我确实这样做了,事实上,如果我将 URL 放入浏览器,XML 就会立即出现。

这是我的 app.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <services>
      <service name="IceVSService.IceVsService" behaviorConfiguration="IceVsServiceBehavior">
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8098/IceVsService/service"/>
          </baseAddresses>
        </host>
        <!-- this endpoint is exposed at the base address provided by host: http://localhost:8098/IceVsService/service  -->
        <endpoint address=""
                  binding="wsHttpBinding"
                  contract="IceVSService.IIceVersioningSystem" />
        <!-- the mex endpoint is explosed at http://localhost:8098/IceVsService/service/mex -->
        <endpoint address="mex"
                  binding="mexHttpBinding"
                  contract="IMetadataExchange" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="IceVsServiceBehavior">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="False"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>
4

1 回答 1

1

HttpGetMex. 这是发布服务详细信息的两种不同方式 - “ metadata exchange format”(MEX)或“ web service description language”(WSDL)。

在您的配置中,您已经定义了两者;但是您还没有定义httpgeturl属性,因此它将被视为空字符串。所以你的 wsdl 地址将是:http://localhost:8098/IceVsService/service?wsdl 而不是http://localhost:8098/IceVsServer/service(IceVsServer 没有在任何地方定义)。

Your mex address will also work with svcutil: http://localhost:8098/IceVsService/service/mex

于 2012-08-11T05:38:09.187 回答