1

通过 svcutil 生成代理时出现此错误:

"Attempting to download metadata from 'net.pipe://localhost/abc.svc' using WS-Metadata Exchange. This URL does not support DISCO."

该服务的编译没有错误,并且可以正常工作httpnet.pipe即使在使用 svcutil 生成代理时出错,生成的 wsdl 也可以正常工作。

为了确保生成新文件,我删除了所有旧文件,然后使用 svcutil 生成文件,然后使用它们。它给出了相同的错误,并且还会生成文件,这些文件在使用时不会在使用服务时出现问题。

我只是很困惑为什么当一切正常时会出现这个错误。

4

2 回答 2

1

普拉纳夫,

您的 mex 端点是正确的。当您使用 netNamedPipeBinding 或 netTcpBinding 时,您需要在服务和 IIS 中进行一些设置。

请参阅在 IIS 中使用 netTcpBinding 或 netNamedPipeBinding 托管 WCF 服务

于 2013-06-20T15:33:34.900 回答
1

那不是错误消息。我会说只是信息,甚至不是警告......

我猜你有类似下面的配置并尝试在 net.pipe 上运行 svcutil。

    <service name="Service" ...>
        <host>
          <baseAddresses>
            <add baseAddress="net.pipe://localhost/" />
          </baseAddresses>
        </host>
        <endpoint address="Service"
                  binding="netNamedPipeBinding"
                  contract="IService" />
        <endpoint address="Service/mex"
                  binding="mexNamedPipeBinding"
                  contract="IMetadataExchange" />
   </service>
   ...
   <serviceMetadata httpGetEnabled="False" />

svcutil 将给出类似“此 URL 不支持 DISCO”的消息,并且仍然成功生成文件

现在您可以将 serviceMetadata 更改为

    <serviceMetadata httpGetEnabled="True" httpGetUrl="http://localhost:8182/Service/mex" />

并运行例如

    svcutil.exe /t:code /l:cpp /ser:Auto http://localhost:8182/Service/mex

它将生成与在 net.pipe 上运行相同的客户端代理代码,但现在具有以下输出...

    Attempting to download metadata from 'http://localhost:8182/Service/mex' using WS-Metadata Exchange or DISCO.
于 2017-11-21T16:31:29.597 回答