混淆了WCF和多个端点

时间:2013-01-05 18:35:14

标签: wcf

下面是一个配置文件示例。有许多绑定可用,如

**basicHttpBinding,netTcpBinding,wsDualHttpBinding** basicHttpBinding,netTcpBinding,wsDualHttpBinding

我是WCF的新手,所以很多人都在考虑混乱,而这些是----

那么人们如何从客户端创建代理以连接wcf服务。自然他们都使用mex端点地址 http:// YourServer / Services / MyService / mex

如果一个mex端点足够,那么客户端如何使用 netTcpBinding或wsDualHttpBinding 向其客户端应用程序发出指令以连接到wcf服务。

请与我分享以下知识: 1)如果我使用客户端的mex端点地址创建代理,那么我的应用程序将使用哪些绑定来连接到wcf服务?

2)如何使用 netTcpBinding或wsDualHttpBinding 从客户端连接到wcf服务?是否有使用代码可用的技巧?

寻找深入讨论。谢谢

<system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="Default">
          <serviceMetadata httpGetEnabled="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service name="YourNamespace.YourService" behaviorConfiguration="Default">
        <endpoint name="Default" 
            address="http://YourServer/Services/MyService" 
            binding="basicHttpBinding" 
            contract="YourNamespace.IYourService"/>
        <endpoint name="TCP" 
            address="net.tcp://YourServer/ServicesTCP/MyService" 
            binding="netTcpBinding" 
            contract="YourNamespace.IYourService"/>
        <endpoint name="mex" 
            address="http://YourServer/Services/MyService/mex" 
            binding="mexHttpBinding" 
            contract="IMetadataExchange"/>
        <endpoint name="Dual" 
            address="http://YourServer/Services/MyService/Dual" 
            binding="wsDualHttpBinding" 
            clientBaseAddress="http://localhost:8001/client/"
            contract="YourNamespace.IYourDualService"/>
      </service>
    </services>
  </system.serviceModel>

2 个答案:

答案 0 :(得分:2)

如果您拥有多个端点的服务,则创建的代理包含服务上公开的每种合同类型的单独客户端类。如果您有多个具有相同合同的端点,则在客户端的配置文件中定义这些端点,并且每个端点都指定了名称。如果要使用某些特定绑定调用服务,只需将端点配置的名称传递给代理构造函数。

答案 1 :(得分:0)

  

如何使用netTcpBinding从客户端连接到wcf服务,或者wsDualHttpBinding是否有使用代码可用的技巧?

这可以通过命名所有配置并将其中一个名称传递到clientproxy来完成:

public class SomeServiceClient : ClientBase<ISomeService>, ISomeService
{

    public SomeServiceClient() { }

    public SomeServiceClient(string endpointConfigurationName) :
        base(endpointConfigurationName) { }

    public void Do()
    {
        Channel.Do();
    }
}

这样,您可以更改端点(以及绑定)运行时。 有关一个工作示例,请查看(https://www.box.com/shared/n4unt3mtjx) Peter Bernhardt (http://peterbernhardt.wordpress.com/2008/09/ 17 /安全和身份中的WCF部分-4-授权定制的索赔/)