net.tcp 使用(显然)Solid .config <systerm.serviceModel> 引发异常

Posted

技术标签:

【中文标题】net.tcp 使用(显然)Solid .config <systerm.serviceModel> 引发异常【英文标题】:net.tcp Throws Exception with (Apparently) Solid .config <systerm.serviceModel> 【发布时间】:2017-01-27 18:18:14 【问题描述】:

我想我已经尝试了所有方法,但我无法让简单的 net.tcp WCF 服务工作,我需要一些帮助。我在 Visual Studio 2015 中有一个 WCF net.tcp 项目,它具有以下服务类:

namespace AppRefactory.JdmCommSample

    public enum DocType  Labels, Releases, Artists 

    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService1" in both code and config file together.
    [ServiceContract]
    public interface ILabelOperations
    

        [OperationContract]
        bool PassLabelProcess(string targetAddress, string hostCommand, MusicLabelContract musicLabel);

        // TODO: Add your service operations here
    

以下在LabelProcess.svc文件中实现服务:

namespace AppRefactory.JdmCommSample

    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "MusicLabel" in code, svc and config file together.
    // NOTE: In order to launch WCF Test Client for testing this service, please select MusicLabel.svc or MusicLabel.svc.cs at the Solution Explorer and start debugging.
    public class LabelOperations : ILabelOperations
    
        public bool PassLabelProcess(string targetAddress, string hostCommand, MusicLabelContract musicLabel)
        
            throw new NotImplementedException();
        
    

我对服务的 web.config 进行了广泛的阅读,并使用了 ServiceModelReg.exe 来帮助我 - 但以下是服务项目的 web.config 的当前版本:

<?xml version="1.0"?>
<configuration>

  <appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true"/>
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.5.2"/>
    <httpRuntime targetFramework="4.5.2"/>
    <httpModules>
      <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web"/>
    </httpModules>
  </system.web>
  <system.serviceModel>
    <behaviors>
      <endpointBehaviors>
        <behavior name="epTcpBehavior">
          <endpointDiscovery />
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="ServiceBehaviorConfig">
          <serviceMetadata httpGetEnabled="false" />
          <serviceDebug httpHelpPageEnabled="false" httpsHelpPageEnabled="false"
            includeExceptionDetailInFaults="true" />
        </behavior>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <protocolMapping>
        <add binding="basicHttpsBinding" scheme="https"/>
        <add binding="netTcpBinding" scheme="net.tcp" bindingConfiguration="InsecureTcp" />
    </protocolMapping>    
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/>
    <services>
      <service behaviorConfiguration="ServiceBehaviorConfig" name="AppRefactory.JdmCommSample.LabelOperations">
        <endpoint address="LabelService" binding="netTcpBinding" bindingConfiguration="InsecureTcp"
          name="LabelOperations" contract="AppRefactory.JdmCommSample.ILabelOperations" />
        <endpoint address="netTcpMex" binding="mexTcpBinding" bindingConfiguration="NewBinding0"
          name="NetTcpMEX" contract="IMetadataExchange" />
        <endpoint address="mexhttp" binding="mexHttpBinding" name="HttpMex"
          contract="IMetadataExchange" />
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://localhost/JdmCommSample/" />
          </baseAddresses>
        </host>
      </service>
    </services>
    <bindings>
      <netTcpBinding>
        <binding name="InsecureTcp" portSharingEnabled="true">
          <security mode="None" />
        </binding>
      </netTcpBinding>
      <mexTcpBinding>
        <binding name="NewBinding0" />
      </mexTcpBinding>
    </bindings>
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
      <remove name="ApplicationInsightsWebTracking"/>
      <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web"
        preCondition="managedHandler"/>
    </modules>
    <!--
        To browse web app root directory during debugging, set the value below to true.
        Set to false before deployment to avoid disclosing web app folder information.
      -->
    <directoryBrowse enabled="true"/>
    <validation validateIntegratedModeConfiguration="false"/>
  </system.webServer>

</configuration>

当我转到客户端项目并尝试添加服务引用(在 Visual Studio 2015 中)时,我收到以下错误:

“发现”按钮在点击时没有显示服务,所以我手动输入服务地址:net://localhost/JdmCommSample/LabelOperations.svc 并点击“开始”按钮得到以下结果:

最后,我点击上方错误消息块(对话框内)中的“详细信息”链接,得到以下信息:

添加服务引用错误对话框:

URI 前缀无法识别。 元数据包含无法解析的引用:“net.tcp://localhost/JdmCommSample/LabelOperations.svc”。 在 net.tcp://localhost/JdmCommSample/LabelOperations.svc 上没有可以接受消息的端点侦听。这通常是由不正确的地址或 SOAP 操作引起的。有关更多详细信息,请参阅 InnerException(如果存在)。 如果在当前解决方案中定义了服务,请尝试构建解决方案并再次添加服务引用。

我已经收到同样的错误消息已经有一段时间了,无法弄清楚为什么客户端的元数据一直坚持使用旧的 http:// 地址作为服务以及为什么它不接受网络。 tcp地址。

最后,我应该快速添加我正在使用以下作为我的开发环境:

Visual Studio 2015 Windows 10 IIS 10

...我花时间尝试通过使用支持 net.tcp 的默认服务(有和没有 http)修改 IIS 设置并在 /bin 和编码文件夹中创建虚拟应用程序来解决这个问题为了支持交互式调试。上面最后对话中描述的错误消息发生了变化 - 但只是说我正在使用的 net.tcp:// 地址“不可用”。

再次感谢您的帮助!!!

【问题讨论】:

请内嵌链接图片而不是超链接。其中之一不可访问。谢谢 *** 限制了图像,所以我现在只能从外部链接——不幸的是。我将尝试在最后修复损坏的图像链接;如果您可以单击上面的两个链接进行响应 - 如果您查看浏览器新打开的图像选项卡,则只需几秒钟。谢谢! 关于图片列表中“添加服务参考 Dalogue - B”的快速说明;它在地址栏的开头显示“net://”.....但是无论 net.tcp:// 是否正确添加,我都会收到此错误消息。 只是一个问题...您使用生成的代理而不是直接调用服务有什么特别的原因吗?在我看来,您的问题可以完全规避。仅应在某些限制条件下生成服务引用以调用服务。 Tom - 看起来你一针见血。只需声明端点并从客户端引用它即可直接解决问题。我在另一个论坛上发布了关于我发现问题的以下内容:MSDN WCF Forum Link 【参考方案1】:

好的 - 所以看起来我已经解决了这个问题......这里的问题是 - 我已经很多年没有使用 Visual Studio 来配置 net.tcp 端点,并且错误地得出了缺席的结论曾经位于系统托盘中的 WCF 测试服务之一将使用“添加服务引用”对话框来配置 net.tcp 链接。

根据有关通过 Windows 进程激活 (WAS) 设置 net.tcp 服务的 MSDN 库文章,所有端点配置和服务引用都使用手工或工具生成的代码(使用 svcutil.exe)在客户端 - 并且在服务端主要是手工制作的逻辑。

因此,我在此线程中的问题是预期不佳和错误信息的结果。抱歉...

这里的下一步是创建一个单向服务方法,该方法将产生向客户端抛出事件的效果。我预计未来几天会有关于该主题的问题在这里发布 - 如果有人有任何有用的链接可以分享该主题,请不要把它们留给自己! ;)

【讨论】:

以上是关于net.tcp 使用(显然)Solid .config <systerm.serviceModel> 引发异常的主要内容,如果未能解决你的问题,请参考以下文章

如何查看 TCP mex xml?

net.tcp协议共享tcp端口的功能

使用邮递员通过 Net.tcp 发送 Soap 请求

我可以为 protobuf-net WCF 使用 net.tcp 绑定吗?

浅谈 SOLID 原则的具体使用

wsFederationHttpBinding over net.tcp