如何使用net tcp绑定和没有mex绑定来使用WCF服务

时间:2013-10-03 15:06:26

标签: wcf nettcpbinding

我安装了一个Windows应用程序,它使用了WCF服务,我只是通过以下配置通过Windows服务中托管的net tcp绑定来查看配置文件中的WCF服务,我想知道客户端如何使用这个WCF服务。应用程序使用此服务来填充UI中的数据,并且它可以正常工作。当我尝试使用它时,我无法通过WCF测试客户端这样做。然后应用程序如何使用此服务?

       <system.serviceModel>
    <bindings>
        <netTcpBinding>

            <binding name="NetTcpBinding_FirstBindingServiceContract" closeTimeout="00:10:00"
               openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:10:00"
               transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"
               hostNameComparisonMode="StrongWildcard" listenBacklog="10"
               maxBufferPoolSize="999999999" maxBufferSize="999999999" maxConnections="10"
               maxReceivedMessageSize="999999999">
                <readerQuotas maxDepth="999999999"
                                          maxStringContentLength="999999999"
                                          maxArrayLength="999999999"
                                          maxBytesPerRead="999999999"
                                          maxNameTableCharCount="999999999" />
                <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" />
                <security mode="Transport">
                    <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
                    <message clientCredentialType="Windows" />
                </security>
            </binding>
        </netTcpBinding>
    </bindings>
    <behaviors>
        <serviceBehaviors>
            <behavior name="MyServiceBehaviors">
                <serviceMetadata />
            </behavior>
        </serviceBehaviors>
    </behaviors>

    <services>
        <service name="MyService.DataAccessService"  behaviorConfiguration="MyServiceBehaviors">

            <endpoint bindingConfiguration="NetTcpBinding_FirstBindingServiceContract"
                      name="firstBinding" address="net.tcp://localhost:25488/MyDataAccessService/MyFirstBindingAddress"
                    binding="netTcpBinding"
                    contract="MyDataService.IMyDataAccessService">
            </endpoint>
        </service>
    </services>
</system.serviceModel>

1 个答案:

答案 0 :(得分:11)

您需要知道三件事来调用WCF服务:

  • 地址 - 在您的案例net.tcp://localhost:25488/MyDataAccessService/MyFirstBindingAddress
  • 中调用的地方
  • 绑定 - 使用哪种协议和参数(在您的情况下:netTcpBinding
  • 合同 - 定义所需服务方法和参数的服务合同(public interface IMyDataAccessService

一旦掌握了这些内容,您就可以轻松地在代码中设置客户端:

NetTcpBinding binding = new NetTcpBinding(NetTcpBinding.None);
EndpointAddress address = new EndpointAddress("net.tcp://localhost:25488/MyDataAccessService/MyFirstBindingAddress");

ChannelFactory<IMyDataAccessService> channelFactory = new ChannelFactory<IMyDataAccessService>(binding, address);
IMyDataAccessService _clientProxy = channelFactory.CreateChannel();

现在你的_clientProxy可以轻松调出服务器上的方法,传入参数等。

当然,为了实现这一点,您必须签订合同!例如。您必须访问定义服务合同的文件(也可能是数据合同 - 来回发送的数据类型)。由于您使用的是netTcpBinding,我假设线路的两端都是使用.NET构建的。

这些项目可以轻松地包含在单独的类库项目中,服务开发人员和客户端开发人员都可以共享和使用这些项目。