WCF InvalidOperationException:绑定实例已与侦听URI相关联

时间:2012-07-16 14:09:19

标签: wcf

我是WCF的初学者,我正在Essential WCF学习。

使用ServiceContract NameSpace和Name时遇到问题。 当我运行代码时,我发现了一个波纹管InvalidOperationException。但我无法理解清楚。

绑定实例已与侦听URI“http:// localhost:8080 / NamespaceChange01”相关联。如果两个端点想要共享相同的ListenUri,则它们还必须共享相同的绑定对象实例。两个冲突的端点在AddServiceEndpoint()调用,配置文件或AddServiceEndpoint()和config的组合中指定。

有谁知道如何使用InvalidOperationException?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;

namespace NamespaceChange01
{

    [ServiceContract(Name = "MyServiceName", Namespace = "http://ServiceNamespace")]
    public interface IBurgerMaster
    {
        [return: MessageParameter(Name = "myOutput")]
        [OperationContract(Name = "OperationName", Action = "OperationAction", ReplyAction = "ReplyActionName")]
        double GetStockPrice(string ticker);
    }

    [ServiceBehavior(Namespace = "http://MyService")]
    public class BurgerMaster : IBurgerMaster
    {

        public double GetStockPrice(string ticker)
        {
            return 100.99;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            ServiceHost host = new ServiceHost(typeof(BurgerMaster));
            host.Open();
            Console.ReadLine();
            host.Close();
        }
    }
}
  • 的app.config

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.serviceModel>
        <services>
          <service name="NamespaceChange01.BurgerMaster" behaviorConfiguration="mexServiceBehavior">
            <host>
              <baseAddresses>
                <add baseAddress="http://localhost:8080/NamespaceChange01"/>
              </baseAddresses>
            </host>
            <endpoint name="basic" binding="basicHttpBinding" contract="NamespaceChange01.IBurgerMaster"/>
            <endpoint name="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
          </service>
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior name="mexServiceBehavior">
              <serviceMetadata httpGetEnabled="true"/>
            </behavior>
          </serviceBehaviors>
        </behaviors>
      </system.serviceModel>
    </configuration>
    

感谢。

4 个答案:

答案 0 :(得分:20)

两个端点(基本和mex)不能在同一地址上。为其中一个(或两个)添加一些特定的地址。

例如:

<endpoint name="mex" address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>

答案 1 :(得分:5)

您缺少元数据终结点的地址属性:

<endpoint name="mex" binding="mexHttpBinding" contract="IMetadataExchange" address="mex" />

没有它,WCF认为您希望在同一地址托管mex端点。

答案 2 :(得分:0)

我知道这是一个老问题,但是最近我遇到了一个非常相似的问题,谷歌让我来了,而且我有一个不同的潜在解决方案:

由于所涉及的服务的标记service完全缺失,并且在IIS中具有HTTP和HTTPS绑定时,我遇到了完全相同的错误消息。

自然地,添加service标签可解决此问题。有趣的是,删除IIS中的HTTPS绑定使HTTP版本可用(尽管显然不希望这样做)。

答案 3 :(得分:-2)

在创建服务类时,为什么要使用ServiceContract属性对其进行标记,如代码所示?

[ServiceBehavior(Namespace = "http://MyService")]
public class BurgerMaster : IBurgerMaster

请删除该内容,然后重试。