使用“添加服务引用...”对话框向NetTcp服务添加服务引用

时间:2014-03-20 17:24:32

标签: c# wcf

我定义了一项服务。 App.config中的服务模型节点是:

<system.serviceModel>
    <bindings>
        <netTcpBinding>
            <binding name="NetTcpBindingConfiguration">
                <security mode="None" />
            </binding>
        </netTcpBinding>
    </bindings>
    <services>
        <service name="Products.ProductsServiceImpl">
            <endpoint address="net.tcp://localhost:8080/Whatever" binding="netTcpBinding"
                bindingConfiguration="NetTcpBindingConfiguration" name="NetTcpBinding_IProductsService"
                contract="Products.IProductsService" />
        </service>
    </services>
</system.serviceModel>

但是当尝试将服务引用添加到客户端应用程序时,我运行该服务,然后我尝试使用“添加服务引用...”对话框添加服务引用,但是我找不到该服务。

enter image description here

如果我添加使用basicHttpBinding的端点,则可以通过“添加服务引用”对话框来本地化该服务。

我尝试添加使用mexTcpBinding的端点,但是在尝试启动服务时遇到错误,我收到一条错误消息,指出在我的服务实现的合同列表中找不到合同IMetadataExchange。

我能错过什么?

更新

使用ServiceHost类(负责启动服务的WPF应用程序的摘录)打开此服务:

var productsServiceHost = new ServiceHost(typeof(ProductsServiceImpl));
productsServiceHost.Open();
stop.IsEnabled = true;
start.IsEnabled = false;
status.Text = "Service Running";

我使用WCF库来创建服务(定义服务和合同的地方))

1 个答案:

答案 0 :(得分:0)

知道了!

我使用了这个博客:http://debugmode.net/2010/06/16/nettcpwcfserviceinwindowservice/

  1. &#34; mex&#34;端点应使用&#34; mexTcpBinding&#34;
  2. 必须定义主机基址,并将主端点地址留空
  3. httpGetEnabled设置为false
  4. 这是完整的服务模型节点(App.config)

    <system.serviceModel>
        <bindings>
            <netTcpBinding>
                <binding name="NetTcpBindingConfiguration">
                    <security mode="None" />
                </binding>
            </netTcpBinding>
        </bindings>
        <services>
            <service name="Products.ProductsServiceImpl" behaviorConfiguration="metadataSupport">
                <endpoint address="" binding="netTcpBinding"
                    bindingConfiguration="NetTcpBindingConfiguration" name="NetTcpBinding_IProductsService" 
                    contract="Products.IProductsService" />
                <endpoint name="MetaDataTcpEndpoint"
                          address="mex"
                          binding="mexTcpBinding"
                          contract="IMetadataExchange"/>
                <host>
                    <baseAddresses>
                        <add baseAddress="net.tcp://localhost:8080/Whatever" />
                    </baseAddresses>
                </host>
            </service>
        </services>
        <behaviors>
            <serviceBehaviors>
                <behavior name="metadataSupport">
                    <serviceMetadata httpGetEnabled="false" />
                </behavior>
            </serviceBehaviors>
        </behaviors>
    </system.serviceModel>
    

    将地址放入“添加服务引用...”对话框时,它应为:

    net.tcp://localhost:8080/Whatever/mex
    

    虽然如果您已经开始提供服务,但在“添加服务参考...”中按“执行”时,如果您没有

    ,它会为您添加mex文本。

    安全模式=&#34;无&#34;是有用的从网络的其他机器访问服务

    快乐的编码。