如何从一个客户端使用多个WCF服务

时间:2009-03-26 14:47:37

标签: c# .net wcf wcf-client

我还在学习整个WCF的事情,所以请在这里忍受。

我所拥有的是使用C#和VS 2008创建的两个自托管服务:
服务#1添加两个数字并返回结果 服务#2返回数字的平方。

我希望客户能够向服务1发送两个号码,得到总和,然后将总和发送到服务2并获得正方形。

我为这两个服务都有两个生成的代理,我可以对它们使用Intellisense,因此该部分可以正常工作。

现在如何配置我的app.config文件,以便我可以与这两种服务进行通信?现在,每当我尝试这样做时,我都会得到一个例外。

[如果我一次只在app文件中有一个配置,客户端工作正常,并尝试只调用该服务器。]

我认为这是一个非常无聊的问题,答案可能是“以_____方式构建配置文件”,但Google似乎没有示例/指南。

任何人都知道怎么做?

注意:Consume multiple WCF services from one client 客户虽然听起来像副本不是我想要的。

修改:感谢marc_s,我让它运转了

在两个服务运行在不同的应用程序中,我不需要拆分服务器配置文件,但这是我对客户端配置文件所做的:首先使用SvrUtil.exe自动生成配置文件然后合并它们这样:

<bindings>
  <wsHttpBinding>

    <binding>
    ...
    </binding>

    <binding>
    ...
    </binding>

  </wsHttpBinding>
</bindings>

       ...       

  <endpoint>

...       
   

3 个答案:

答案 0 :(得分:3)

我意识到你已经要求App.Config的答案,但想想这可能会有所帮助。我通常首先以编程方式首先配置客户端连接,因为它更简单,一旦你有了工作,你可以将它移动到你的App.Config。

以下是如何配置WCF客户端的例子。

BasicHttpBinding binding = new BasicHttpBinding();
EndpointAddress address = new EndpointAddress(serverURL);
MyServiceClient myServiceProxy = new MyServiceClient(binding, address);

然后,您可以在App.Config中使用以下内容。

<client>
    <endpoint address="http://localhost/service1.asmx"
            binding="basicHttpBinding"
            bindingConfiguration="basicHttpBinding" 
            contract="IService1"
            name="Service1" />
    <endpoint address="http://localhost/service2.asmx" 
            binding="basicHttpBinding"
            bindingConfiguration="basicHttpBinding"
            contract="IService2"
            name="Service2" />
</client>

答案 1 :(得分:3)

如果要在不同的端点/端口上运行这两个服务,请执行以下操作:

服务器侧

<service name="Service1">
    <endpoint address="http://localhost:8001/service1.asmx"
            binding="basicHttpBinding"
            contract="IService1" />
</service>
<service name="Service2">
    <endpoint address="http://localhost:8002/service2.asmx" 
            binding="basicHttpBinding"
            contract="IService2" />
</service>

<强>客户端:

<client>
    <endpoint address="http://localhost:8001/service1.asmx"
            binding="basicHttpBinding"
            contract="IService1"
            name="Service1" />
    <endpoint address="http://localhost:8002/service2.asmx" 
            binding="basicHttpBinding"
            contract="IService2"
            name="Service2" />
</client>

这应该为您提供服务器上的两个独立的单独端点以及将与两者进行通信的客户端。

马克

答案 2 :(得分:0)

你刚刚发生了端点冲突吗?例如,确保两个服务都未配置为侦听相同的端口号。如果您可以发布您的配置文件(或其清理版本),那将有所帮助。