WCF服务库与NetTcpBinding的WCF、NetTcpBinding

2023-09-04 00:11:28 作者:人间失格

我有一个艰难的时间与NetTcpBinding的。

当我跑我的WCFservice,我得到这样的:

  System.InvalidOperationException:找不到与绑定NetTcpBinding的端点符合计划的net.tcp的基址。已注册的基址方案是[HTTP]。
   在System.ServiceModel.ServiceHostBase.MakeAbsoluteUri(URI relativeOrAbsoluteUri,约束力181,UriSchemeKeyedCollection baseAddresses)
   在System.ServiceModel.Description.ConfigLoader.LoadServiceDescription(ServiceHostBase主机,ServiceDescription描述,ServiceElement serviceElement,Action`1 addBaseAddress)
   在System.ServiceModel.ServiceHostBase.LoadConfigurationSectionInternal(ConfigLoader configLoader,ServiceDescription描述,ServiceElement serviceSection)
   在System.ServiceModel.ServiceHostBase.LoadConfigurationSectionInternal(ConfigLoader configLoader,ServiceDescription描述,字符串configurationName)
   在System.ServiceModel.ServiceHostBase.ApplyConfiguration()
   在System.ServiceModel.ServiceHostBase.InitializeDescription(UriSchemeKeyedCollection baseAddresses)
   在System.ServiceModel.ServiceHost.InitializeDescription(类型的serviceType,UriSchemeKeyedCollection baseAddresses)
   在System.ServiceModel.ServiceHost..ctor(类型的​​serviceType,乌里[] baseAddresses)
   在Microsoft.Tools.SvcHost.ServiceHostHelper.CreateServiceHost(类型类型,ServiceKind的那种)
   在Microsoft.Tools.SvcHost.ServiceHostHelper.OpenService(ServiceInfo信息)
 

我得到这个,当我使用WCFSvcHost默认运行应用程序。 有c.Just任何新的WCF服务的默认code无额外的$ C $。 所有我想做的事是更改绑定到TCP。

我该如何解决这个问题?

编辑:这是我的WCF的App.config中

 < XML版本=1.0编码=UTF-8&GT?;
<结构>
  <的System.Web>
    <编译调试=真/>
  < /system.web>
  < system.serviceModel>
    <绑定>
      < NetTcpBinding的>
        <绑定名称=tcpBindingtransferMode =流媒体portSharingEnabled =假>
          <启用的ReliableSession =真/>
          <安全模式=无>
            <交通运输clientCredentialType =无的ProtectionLevel =无/>
            <消息clientCredentialType =无/>
          < /安全>
        < /装订>
      < / NetTcpBinding的>
    < /绑定>
    <服务>
      <服务behaviorConfiguration =WcfServiceLibrary1.Service1Behavior
        NAME =WcfServiceLibrary1.Service1>
        <端点地址=绑定=的wsHttpBinding合同=WcfServiceLibrary1.IService1>
          <身份>
            < D​​NS值=本地主机/>
          < /身分>
        < /端点>
        <端点地址=MEX绑定=mexHttpBinding合同=IMetadataExchange接口/>
        <端点地址=服务绑定=NetTcpBinding的bindingConfiguration =tcpBinding
          NAME =testTcp合同=WcfServiceLibrary1.IService1/>
        <主机>
          < baseAddresses>
            <新增baseAddress =HTTP://本地主机:8731 / Design_Time_Addresses / WcfServiceLibrary1 /服务1 //>
          < / baseAddresses>
        < /主机>
      < /服务>
    < /服务>
    <行为>
      < serviceBehaviors>
        <行为NAME =WcfServiceLibrary1.Service1Behavior>
          < serviceMetadata httpGetEnabled =真/>
          < serviceDebug includeExceptionDetailInFaults =FALSE/>
        < /行为>
      < / serviceBehaviors>
    < /行为>
  < /system.serviceModel>
< /结构>
 
WCF服务

解决方案

在本节

 <主机>
  < baseAddresses>
    <新增baseAddress =HTTP://本地主机:8731 /...//>
  < / baseAddresses>
< /主机>
 

添加的net.tcp://基址

 <主机>
  < baseAddresses>
    <新增baseAddress =HTTP://本地主机:8732 //>
    <新增baseAddress =的net.tcp:// localhost的/>
  < / baseAddresses>
< /主机>
 

I'm having a tough time with NetTcpBinding.

When I run my WCFservice,I get this:

System.InvalidOperationException: Could not find a base address that matches scheme net.tcp for the endpoint with binding NetTcpBinding. Registered base address schemes are [http].
   at System.ServiceModel.ServiceHostBase.MakeAbsoluteUri(Uri relativeOrAbsoluteUri, Binding binding, UriSchemeKeyedCollection baseAddresses)
   at System.ServiceModel.Description.ConfigLoader.LoadServiceDescription(ServiceHostBase host, ServiceDescription description, ServiceElement serviceElement, Action`1 addBaseAddress)
   at System.ServiceModel.ServiceHostBase.LoadConfigurationSectionInternal(ConfigLoader configLoader, ServiceDescription description, ServiceElement serviceSection)
   at System.ServiceModel.ServiceHostBase.LoadConfigurationSectionInternal(ConfigLoader configLoader, ServiceDescription description, String configurationName)
   at System.ServiceModel.ServiceHostBase.ApplyConfiguration()
   at System.ServiceModel.ServiceHostBase.InitializeDescription(UriSchemeKeyedCollection baseAddresses)
   at System.ServiceModel.ServiceHost.InitializeDescription(Type serviceType, UriSchemeKeyedCollection baseAddresses)
   at System.ServiceModel.ServiceHost..ctor(Type serviceType, Uri[] baseAddresses)
   at Microsoft.Tools.SvcHost.ServiceHostHelper.CreateServiceHost(Type type, ServiceKind kind)
   at Microsoft.Tools.SvcHost.ServiceHostHelper.OpenService(ServiceInfo info)

I'm getting this when I run the application by default using WCFSvcHost. There's no extra code.Just the default code of any new wcf service. All I wanted to do was change the binding to tcp.

How do I solve this problem?

Edit: Here's my WCF's App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.web>
    <compilation debug="true" />
  </system.web>
  <system.serviceModel>
    <bindings>
      <netTcpBinding>
        <binding name="tcpBinding" transferMode="Streamed" portSharingEnabled="false">
          <reliableSession enabled="true" />
          <security mode="None">
            <transport clientCredentialType="None" protectionLevel="None" />
            <message clientCredentialType="None" />
          </security>
        </binding>
      </netTcpBinding>
    </bindings>
    <services>
      <service behaviorConfiguration="WcfServiceLibrary1.Service1Behavior"
        name="WcfServiceLibrary1.Service1">
        <endpoint address="" binding="wsHttpBinding" contract="WcfServiceLibrary1.IService1">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
        <endpoint address="Service" binding="netTcpBinding" bindingConfiguration="tcpBinding"
          name="testTcp" contract="WcfServiceLibrary1.IService1" />
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8731/Design_Time_Addresses/WcfServiceLibrary1/Service1/" />
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="WcfServiceLibrary1.Service1Behavior">
          <serviceMetadata httpGetEnabled="True"/>
          <serviceDebug includeExceptionDetailInFaults="False" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

解决方案

In this section

<host>          
  <baseAddresses>            
    <add baseAddress="http://localhost:8731/.../" />   
  </baseAddresses>        
</host>

add a net.tcp:// base address.

<host>
  <baseAddresses>
    <add baseAddress="http://localhost:8732/" />
    <add baseAddress="net.tcp://localhost"/>
  </baseAddresses>
</host>