1

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

**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>
4

2 回答 2

2

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

于 2013-01-07T12:08:55.680 回答
0

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

这可以通过命名所有配置并将这些名称之一传递给客户端代理来完成:

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/security-and-identity -in-wcf-part-4-authorizing-custom-claims/)

于 2013-01-07T12:36:15.420 回答