为具有多个接口的Web服务配置端点

时间:2014-02-14 20:43:53

标签: c# web-services interface web-config

我需要能够为我创建的Web服务中的每个接口配置端点。 使用测试Web表单应用程序,我可以成功使用任一界面。但是当我尝试使用第二个接口添加第二个端点时,我收到以下错误:

Error when updating service reference 以下是Web服务的web.config文件:

    <basicHttpBinding>
      <binding name="myBindingConfiguration1" closeTimeout="00:01:00" />
    </basicHttpBinding>
  </bindings>

    <services>
      <service behaviorConfiguration="PaymentServiceBehavior" name="PaymentService.PaymentService">
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
        <endpoint address="" binding="basicHttpBinding" bindingConfiguration="myBindingConfiguration1"
          name="PaymentInsecureService" contract="PaymentService.IPaymentService" />
        <endpoint address="" binding="basicHttpBinding" bindingConfiguration="myBindingConfiguration1"
          name="PaymentSecureService" contract="PaymentService.IPaymentSecureService" />
      </service>
    </services>

这是测试应用程序中的web.config文件:

<bindings>
  <basicHttpBinding>
    <binding name="BasicHttpBinding_IPaymentService" />
  </basicHttpBinding>
</bindings>
<client>
  <endpoint address="http://localhost:4567/Payment.svc" binding="basicHttpBinding"
    bindingConfiguration="BasicHttpBinding_IPaymentService" contract="PaymentService.IPaymentService"
    name="PaymentInsecureService" />
  <endpoint address="http://localhost:4567/Payment.svc" binding="basicHttpBinding"
    bindingConfiguration="BasicHttpBinding_IPaymentService" contract="PaymentService.IPaymentSecureService"
    name="PaymentSecureService" />
</client>

这是Web服务接口的代码:

namespace PaymentService
{
    [ServiceContract (Namespace = "name of namespace here")]
    public interface IPaymentSecureService
    {
        //Initiate a credit card authorization.
        [OperationContract(IsOneWay = true)]
        void Authorize(...12 parameters here...);

        more methods here....
    }
}

namespace PaymentService
{
    [ServiceContract (Namespace = "name of namespace here")]
    public interface IPaymentService
    {
        //Initiate a credit card authorization.
        [OperationContract(IsOneWay = true)]
        void Authorize(...13 parameters here....);

        more methods here...
    }
}

当其中一个接口方法具有相同名称但方法签名不同时,是否可以为每个接口设置端点?

我的配置文件有问题吗?

感谢。

1 个答案:

答案 0 :(得分:0)

我已在其他2个论坛上发布此问题。虽然您应该能够使用相同方法名称但具有不同签名的2个接口并使用2个端点来访问每个接口,但我认为不可能,除非您执行以下操作之一:

  1. 每个接口的命名空间都是唯一的。
  2. 重载方法的name属性是唯一的。
  3. 我选择了第一个选项,因为我正在更新遗留代码,并且在方法中添加name属性实际上会更改方法的名称。因此,需要更改在服务中使用此方法的所有客户端应用程序。我想最小化对这些应用程序的更改,所以我改变命名空间。

    我认为此命名空间属性用于指向服务所在的位置。根据Microsoft文档和我有限的本地测试,情况并非如此。这是文档的摘录:

    使用您控制的命名空间标识XML Web服务。例如,您可以将公司的Internet域名用作命名空间的一部分。许多XML Web服务命名空间看起来与URL类似,但是,命名空间不必指向Web上的实际资源。 (XML Web服务名称空间是URI。)(统一资源标识符)。通过使用XML命名空间,您可以唯一地标识xml文档中的元素或属性。 xml Web服务的服务描述是xml,特别是在WSDL中。

    我希望这可以帮助其他人解决这个问题...