我需要能够为我创建的Web服务中的每个接口配置端点。 使用测试Web表单应用程序,我可以成功使用任一界面。但是当我尝试使用第二个接口添加第二个端点时,我收到以下错误:
以下是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...
}
}
当其中一个接口方法具有相同名称但方法签名不同时,是否可以为每个接口设置端点?
我的配置文件有问题吗?
感谢。
答案 0 :(得分:0)
我已在其他2个论坛上发布此问题。虽然您应该能够使用相同方法名称但具有不同签名的2个接口并使用2个端点来访问每个接口,但我认为不可能,除非您执行以下操作之一:
我选择了第一个选项,因为我正在更新遗留代码,并且在方法中添加name属性实际上会更改方法的名称。因此,需要更改在服务中使用此方法的所有客户端应用程序。我想最小化对这些应用程序的更改,所以我改变命名空间。
我认为此命名空间属性用于指向服务所在的位置。根据Microsoft文档和我有限的本地测试,情况并非如此。这是文档的摘录:
使用您控制的命名空间标识XML Web服务。例如,您可以将公司的Internet域名用作命名空间的一部分。许多XML Web服务命名空间看起来与URL类似,但是,命名空间不必指向Web上的实际资源。 (XML Web服务名称空间是URI。)(统一资源标识符)。通过使用XML命名空间,您可以唯一地标识xml文档中的元素或属性。 xml Web服务的服务描述是xml,特别是在WSDL中。
我希望这可以帮助其他人解决这个问题...