试图从' net.pipe://localhost/abc.svc&#39下载元数据;使用WS-Metadata Exchange。此URL不支持DISCO

时间:2013-06-20 06:45:24

标签: c# wcf svcutil.exe net.pipe

通过svcutil:

生成代理时出现此错误
"Attempting to download metadata from 'net.pipe://localhost/abc.svc' using WS-Metadata Exchange. This URL does not support DISCO."

服务编译时没有错误&与http之前的工作正常。 生成的wsdl对于net.pipe工作正常,即使在使用svcutil生成代理时发生错误也没有问题。

为了确保生成新文件,我删除了所有旧文件&然后使用svcutil生成文件,然后使用它们。它会产生相同的错误并生成文件,这些文件在使用时在使用服务时没有任何问题。

我很困惑,为什么当每件事情都正常时,这个错误就存在。

2 个答案:

答案 0 :(得分:1)

Pranav,

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

参考Hosting WCF service with netTcpBinding or netNamedPipeBinding in IIS

答案 1 :(得分:1)

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

我猜你有类似下面的配置,并尝试在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.