How to consume multiple WCF services from one client

ⅰ亾dé卋堺 提交于 2019-12-30 04:58:09

问题


I am still learning the whole WCF thing, so please bear with me here.

What I have is two self hosted services created using C# and VS 2008:
Service # 1 Adds two numbers and returns the result.
Service # 2 Returns the square of a number.

I want the client to be able to send in two numbers to Service 1, get the sum and then send the sum in to Service 2 and get the square.

I have two generated proxies for both the services, and I am able to use Intellisense on them, so that part supposedly works.

Now how do i configure my app.config file such that I can communicate with both the services? Right now, i get an exception every time I try to do that.

[The client works fine if I only have one of the configurations in the app file at a time, and try to call only that server.]

I suppose this is a very noobish question, and the answer probably is "structure the config file in _____ manner", but Google simply does not seem to have an example/guide.

Anyone know how to do this?

Note: Consume multiple WCF services from one client client Though sounds like a duplicate is NOT what I am looking for.

Edit: Thanks to marc_s, I got it working

With both the services running in different apps, I did not need to split the server config file, but here is what I did with the client config files: First auto-generated the config files using SvrUtil.exe and then merged them in this way:

<bindings>
  <wsHttpBinding>

    <binding>
    ...
    </binding>

    <binding>
    ...
    </binding>

  </wsHttpBinding>
</bindings>

...

  <endpoint>

...


回答1:


If you want to run the two services on separate endpoints / ports, do something like this:

Server-side:

<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-side:

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

That should give you two separate, individual endpoints on the server and a client that will talk to both.

Marc




回答2:


I realise you have asked for an App.Config answer but figure this might help. I would normally start by configuring the client connections programatically first, since it's simpler, and once you have got that working you could move it to your App.Config.

Here's an exmaple of how to configure a WCF client.

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

You could then have something like the below in your 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>



回答3:


Do you just have a clash of endpoints? Make sure that both services aren't configured to listen on the same port number for example. If you could post your config file (or a sanitised version of it) that would help.



来源:https://stackoverflow.com/questions/686112/how-to-consume-multiple-wcf-services-from-one-client

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!