【问题标题】:Cannot obtain Metadata from net.tcp://127.0.0.1ServiceName无法从 net.tcp://127.0.0.1ServiceName 获取元数据
【发布时间】:2013-10-28 09:10:55
【问题描述】:

创建服务配置为:

<system.serviceModel>
       <services>
            <service behaviorConfiguration="DefaultBehaviour" 
                     name="DocumentManagementService.SharePointToSQL">
                 <endpoint address=""
                            binding="netTcpBinding" name="docManagementService"
                            contract="DocumentManagementService.ISharePointToSQL" />
                 <endpoint address="/mex" 
                           binding="mexTcpBinding"
                           contract="IMetadataExchange" />
                 <host>

                      <baseAddresses>
                           <add baseAddress="net.tcp://127.0.0.1/DocManagementService" />
                      </baseAddresses>
                 </host>
            </service>
       </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="DefaultBehaviour">
          <serviceDebug includeExceptionDetailInFaults="true"/>
          <serviceMetadata httpGetEnabled="true" httpGetUrl="http://127.0.0.1" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

并托管它:

using (ServiceHost serviceHost = new ServiceHost(typeof(SharePointToSQL)))
            {
                serviceHost.Open();

                foreach (var endPoints in serviceHost.Description.Endpoints)
                {
                    Console.WriteLine(endPoints.Address);
                }
            }

我可以在通过控制台托管应用程序时看到端点地址:

但是当我尝试使用 wcftestclient 添加服务时,出现错误:

Error: 
Cannot obtain Metadata from net.tcp://127.0.0.1/DocManagementService/mex If this 
is a Windows (R) Communication Foundation service to which you have access,
 please check that you have enabled metadata publishing at the specified address.

【问题讨论】:

    标签: c# .net wcf c#-4.0


    【解决方案1】:

    刚刚更新了托管应用程序的代码:

    using (ServiceHost serviceHost = new ServiceHost(typeof(SharePointToSQL)))
                {
                    serviceHost.Open();
    
                    foreach (var endPoints in serviceHost.Description.Endpoints)
                    {
                        Console.WriteLine(endPoints.Address);
                    }
    
                    Console.ReadKey();
                    serviceHost.Close();
                }
    

    使用块将控制台读取和主机关闭移到内部并正常工作。其他明智的服务正在关闭,然后等待控制台读取。由于服务已关闭,因此无法创建代理。

    【讨论】:

    • 问题是你立即关闭了主机(当使用块结束时 - 这就是使用块的目的)。
    • @usr,是的,刚刚知道了
    猜你喜欢
    • 2022-11-01
    • 1970-01-01
    • 2012-05-08
    • 1970-01-01
    • 2012-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多