如何通过TCP端口托管WCF?

5

我该如何通过TCP端口托管WCF服务,以及如何监听并通过这些TCP端口使用服务?

也就是说,除了net.tcp绑定外,是否有其他方式可以使用TCP端口进行托管和消费?


基本上,在Windows XP中,主机和消费可以通过以下3种方式进行: 1.自托管 2.IIS 3.作为Windows服务因此,打开TCP端口并进行消费,是属于自托管的范畴,还是另一种WCF服务主机和消费的方式,或者是否有其他方式,例如在TCP下? - kurozakura
5个回答

8
在WCF中,您可以通过创建ServiceHost类的实例、使用正确的终结点和要公开的服务实现进行配置并调用Open来自行托管任何服务。这被称为自托管,因为您从自己的应用程序中托管服务(以及其端口侦听器)。
或者,您可以在IIS中托管您的服务,但是您应该知道,虽然您可以在IIS 6中托管WCF,但它仅允许您托管HTTP和HTTPS终结点。如果您想在IIS中托管TCP终结点(这是个好主意),您需要IIS 7。
了解更多信息请点击此处

1
基本上,在Windows XP中,主机和消费可以通过以下3种方式完成: 1.自托管 2.IIS 3.作为Windows服务因此,打开TCP端口并进行消费是属于自托管的范畴,还是另一种WCF服务主机和消费的方式,或者是否有其他方式,例如在TCP下? - kurozakura
Windows XP 不支持运行 IIS 7,因此您无法在 XP 上托管在 IIS 下的 TCP 端点。您可以让 Windows Service 托管 WCF 服务,但这只是自托管的另一个示例。 - Mark Seemann

0

也许这可以帮助

<services>
  <service behaviorConfiguration="configname"
    name="servicename">
    <endpoint address="" binding="netTcpBinding" bindingConfiguration="MyServiceBinding"
      name="NetTcpBindingEndpoint" bindingName="MyServiceBinding"
      contract="Interface">
      <identity>
        <dns value="localhost" />
      </identity>
    </endpoint>

    <endpoint address="mex" binding="customBinding" bindingConfiguration="myMexTcpBinding"
      name="MexTcpBindingEndpoint" contract="IMetadataExchange" />
    <host>
      <baseAddresses>
        <add baseAddress="net.tcp://localhost:prot/TestService" />
      </baseAddresses>
    </host>
  </service>
</services>

0
所有HTTP绑定都使用TCP作为传输层。因此,您可以使用HTTP绑定和IIS.6来托管在特定TCP端口上运行的WCF服务。
以下是实现此目标的步骤:
  • 从配置文件(或代码)中配置服务以在所需端口上运行:

    <service name="WCFService" behaviorConfiguration="DefaultBehaviour">
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8000/WCFService" />
      </baseAddresses>
    </host>
    <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration="" name="WCFService_mexEndpoint" contract="IMetadataExchange" />
    <endpoint address="" binding="wsHttpBinding" bindingConfiguration="DefaultBinding" name="WCFService_Endpoint" contract="WCFService.IService1" />
    

  • 在IIS中创建一个网站(或虚拟目录),并将其绑定配置为在您的baseAddress服务配置中选择的端口上运行(对于上面的示例,为8000)。

上述步骤的结果是一个运行在TCP端口8000上的WCF服务,使用HTTP作为传输协议。
编辑:我认为你在这里有点混乱。如果你想要实现的是二进制传输包,那么手头唯一的解决方案是net.tcp绑定,它不兼容IIS.6.如果你只想能够选择连接的TCP端口,那么任何HTTP绑定都可以像我上面的示例一样做到这一点,并且可以在IIS.6中使用。

基本上,在Windows XP中,主机和消费可以通过以下3种方式进行: 1.自托管 2.IIS 3.作为Windows服务因此,打开TCP端口并使用它属于自托管吗?还是这是另一种托管和消费WCF服务的方式?或者还有其他方式,例如在TCP下? - kurozakura
我认为你可以在IIS 7中使用WAS来托管TCP。 - Tad Donaghe
HTTP是一种应用协议,而不是传输协议。 - aehlke

0

我知道有点晚了.. 但是,我想你可以使用Visual Studio附带的"WCF服务主机"应用程序。


0

你可以使用任何端口(前提是你有它的权限)来托管你的WCF服务。在使用IIS托管WCF服务时,有些不同,但在自托管环境中,只需将端口号添加到基地址即可完成。(当使用Vista或Server 2008时,如果没有管理员权限运行(例如使用netsh),则必须授予对端口的访问权限)

要使用例如1337端口提供HTTP服务(或net.tcp),只需将“:1337/”添加到基地址即可完成其余操作。


基本上,在Windows XP中,主机和消费可以通过以下3种方式进行: 1.自托管 2.IIS 3.作为Windows服务因此,打开TCP端口并进行消费属于自托管,还是WCF服务的另一种主机和消费方式,或者还有其他方式? - kurozakura
在此处了解有关使用netsh打开端口的更多信息:http://msdn.microsoft.com/en-us/library/ms733768.aspx - Darren Oster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接