繁体   English   中英

WCF 通过 TCP 交换服务元数据

[英]WCF Service Metadata Exchange over TCP

我创建了一个托管在 IIS 上的 WCF 服务。 使用 HTTP 绑定一切正常。 但是当我切换到 TCP 绑定时,它不再起作用。 我尝试了在 web 上找到的所有提示,但没有成功。

已经完成了:

  • 已安装 Windows 功能“WCF-Non-Http-Activation”
  • 激活 Windows Service Net.Tcp-Listener Adapter

在 WcfTestClient 中无法添加该服务。 但也许这个工具不支持 TCP(?)所以我也在 Visual Studio 中通过尝试添加服务引用进行了测试。 尝试在 VS 中添加服务时出现错误消息:

尝试在“net.tcp://hostname:19099/Namespace/Company.Service.svc/mex”中查找服务时出错。 没有为主机主机名找到 IPEndpoints。 详细信息:元数据包含无法解析的引用:“net.tcp://hostname:19099/Namespace/Company.Service.svc/mex”。

这是我当前的 web.config (匿名) - 我做错了什么?

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.web>
        <compilation targetFramework="4.8"/>
        <httpRuntime targetFramework="4.8"/>
        <customErrors mode="Off"/>
    </system.web>
    
    <system.serviceModel>
        <behaviors>
            <serviceBehaviors>
                <behavior name="ServiceBehavior">
                    <serviceMetadata />
                    <serviceDebug includeExceptionDetailInFaults="true"/>
                </behavior>
            </serviceBehaviors>
        </behaviors>

        <services>
            <service name="Company.Namespace.Service" behaviorConfiguration="ServiceBehavior">
                <endpoint name="ServiceEndpoint" address="" binding="netTcpBinding"
                    bindingConfiguration="ServiceNetTcpBinding" contract="Company.Namespace.IService"/>
                <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange"/>
                <host>
            <baseAddresses>
                        <add baseAddress="net.tcp://hostname:19099/Namespace/Company.Service/"/>
            </baseAddresses>
        </host>
            </service>
        </services>

        <bindings>
            <basicHttpBinding>
                <binding name="ServiceBasicHttpBinding" sendTimeout="00:01:00" receiveTimeout="00:01:00" openTimeout="00:01:00" closeTimeout="00:01:00"/>
            </basicHttpBinding>
            <netTcpBinding>
                <binding name="ServiceNetTcpBinding" sendTimeout="00:01:00" receiveTimeout="00:01:00" openTimeout="00:01:00" closeTimeout="00:01:00"
                    transferMode="Buffered" transactionFlow="false" hostNameComparisonMode="StrongWildcard" listenBacklog="10" maxBufferPoolSize="524288"
                    maxBufferSize="65536" maxConnections="10" maxReceivedMessageSize="65536" portSharingEnabled="false" transactionProtocol="OleTransactions">
                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/>
                    <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false"/>
                    <security mode="Transport">
                        <message clientCredentialType="None"/>
                        <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign"/>
                    </security>
                </binding>
            </netTcpBinding>
            <wsHttpBinding>
                <binding name="ServiceWsHttpBinding" sendTimeout="01:00:30" receiveTimeout="01:00:30"/>
            </wsHttpBinding>
        </bindings>

        <protocolMapping>
            <add binding="basicHttpsBinding" scheme="https"/>
        </protocolMapping>
        <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/>

    </system.serviceModel>

    <system.webServer>
        <modules runAllManagedModulesForAllRequests="true"/>
        <directoryBrowse enabled="true"/>
    </system.webServer>
</configuration>

当您说您取消了最大连接数并且它起作用时,这是否意味着最大连接数限制了您的网络?

据我所知,IIS 5/6 不支持非HTTP服务。 IIS7支持Net TCP,但必须先安装WAS。 请参考以下步骤:

  1. 控制面板 -- 程序和功能 -- 打开或关闭 Windows 功能并安装 WAS。
  2. 检查是否为 WCF 启用了非 HTTP 支持。 Select 在 .NET 框架中的相同接口。
  3. 将 Net TCP 绑定添加到站点并启用 Net TCP 协议。

更多细节也可以在这个文档中找到。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM