【问题标题】:Can't Add Service Reference in VS 2010 to a net.tcp endpoint无法将 VS 2010 中的服务引用添加到 net.tcp 端点
【发布时间】:2010-09-15 22:29:41
【问题描述】:

我有一个服务正在运行(好吧,它不会崩溃),但是当我尝试向它添加服务引用时,我不断得到:

元数据包含无法解析的引用:“net.tcp://localhost:55555/mex”。 元数据包含无法解析的引用:“net.tcp://localhost:55555/mex”。 如果在当前解决方案中定义了服务,请尝试构建解决方案并再次添加服务引用。

我的配置文件的相关部分是:

    <netTcpBinding>
 <binding name="ReliableDuplexBinding" closeTimeout="00:00:10"
     openTimeout="00:00:10" receiveTimeout="00:00:30" sendTimeout="00:00:15"
     maxBufferPoolSize="1048576" maxBufferSize="262144" maxReceivedMessageSize="262144">
   <readerQuotas maxDepth="33" maxStringContentLength="100000" maxArrayLength="131072"
      maxBytesPerRead="262144" maxNameTableCharCount="54000" />
   <reliableSession inactivityTimeout="05:00:00" enabled="true" />
   <security mode="None">
    <transport>
     <extendedProtectionPolicy policyEnforcement="Never" />
    </transport>
   </security>
 </binding>
</netTcpBinding>
  <behaviors>
   <serviceBehaviors>
    <behavior name="DefaultServiceBehavior">
     <serviceMetadata httpGetEnabled="false" />
     <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
   </serviceBehaviors>
  </behaviors>
<services>
   <service behaviorConfiguration="DefaultServiceBehavior" name="Cad.Server.RccInboxService">
    <endpoint address="RccInterface" binding="netTcpBinding" bindingConfiguration="ReliableDuplexBinding"
     name="Cad.Server.RccInboxService" contract="Cad.Net.Wcf.Contracts.IRccUserInterface" />
    <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" name="Cad.Server.mex" />
    <host>
     <baseAddresses>
      <add baseAddress="net.tcp://localhost:55555" />
     </baseAddresses>
     <timeouts closeTimeout="00:01:00" />
    </host>
   </service>
  </services>

该服务是自托管的,下面的代码似乎可以工作,但我无法达到创建服务引用的地步:

Public Sub StartServiceHost()
   'Publish the Wcf Service endpoint.
   Try
    shRccUserInterface = New ServiceHost(Me._RccInboxService)
    AddHandler shRccUserInterface.Faulted, AddressOf OnChannelFaulted
    AddHandler shRccUserInterface.Closed, AddressOf OnChannelClosed
    AddHandler shRccUserInterface.Opened, AddressOf OnChannelOpened
    AddHandler shRccUserInterface.Opening, AddressOf OnChannelOpening
    AddHandler shRccUserInterface.UnknownMessageReceived, AddressOf OnUnknownMessageReceived

    Me.bndRccUserInterface = New NetTcpBinding("ReliableDuplexBinding")
    Dim ep As Description.ServiceEndpoint
    With shRccUserInterface
     ep = .AddServiceEndpoint(GetType(Cad.Net.Wcf.Contracts.IRccUserInterface), bndRccUserInterface, String.Empty)
     RaiseEvent ShowUserMessageEvent(Me, "Opening Endpoint: " & ep.Address.ToString, UtaCommon.Interfaces.StatusListEntryType.Information)
     .Open()
    End With
    Me.blnServiceHostOpen = True
    RaiseEvent ServiceHostOpenEvent(Me)
   Catch exWcf As Exception
    log.Write_Error("RccGuiComm", "StartServiceHost()", exWcf)
    RaiseEvent SendUtaEmailEvent("Wcf Problem", exWcf.ToString, System.Net.Mail.MailPriority.High)
   End Try
  End Sub

服务必须是自托管的。我已经为此奋斗了一段时间。如果有人能提供帮助,我将不胜感激。

最好的,

杰森

【问题讨论】:

    标签: vb.net wcf visual-studio-2010


    【解决方案1】:

    您可以使用 http mex 端点,即使您的主要端点是 nettcp。

    http://jeffbarnes.net/blog/post/2006/10/16/Metadata-Exchange-Endpoint.aspx

    确保您拥有:

    <serviceMetadata httpGetEnabled="true" />
    

    【讨论】:

    • 这是一个选项,虽然我无法让它工作。它总是给我一个关于基地址的错误。
    • 尝试删除基地址并指定端点上的地址
    猜你喜欢
    • 2015-03-06
    • 2019-09-20
    • 2014-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多