5

我还在学习整个 WCF 的东西,所以请耐心等待。

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

我希望客户端能够将两个数字发送到服务 1,得到总和,然后将总和发送到服务 2 并得到平方。

我为这两个服务生成了两个代理,并且我可以在它们上使用 Intellisense,所以这部分应该可以工作。

现在如何配置我的 app.config 文件,以便我可以与这两个服务进行通信?现在,每次我尝试这样做时都会遇到异常。

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

我想这是一个非常愚蠢的问题,答案可能是“以_____方式构造配置文件”,但谷歌似乎根本没有示例/指南。

有人知道怎么做吗?

注意:从一个客户端客户端使用多个 WCF 服务 虽然听起来像重复不是我想要的。

编辑:感谢marc_s,我得到了它的工作

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

<bindings>
  <wsHttpBinding>

    <binding>
    ...
    </binding>

    <binding>
    ...
    </binding>

  </wsHttpBinding>
</bindings>

...

  <endpoint>

...

4

3 回答 3

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>
于 2009-03-26T14:58:31.390 回答
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>

这应该会在服务器上为您提供两个单独的端点和一个将与两者对话的客户端。

马克

于 2009-03-26T17:25:02.163 回答
0

你只是有端点冲突吗?例如,请确保两个服务未配置为侦听相同的端口号。如果您可以发布您的配置文件(或它的净化版本),那将有所帮助。

于 2009-03-26T14:55:52.253 回答