none
vs2013 网站添加服务引用后,报错 RRS feed

  • 问题

  • 我在解决方案下 新建网站,然后添加 服务引用,http://localhost:1883/WebService1.asmx 这个地址,然后在页面代码 写上

    ServiceReference1.WebService1SoapClient client = new ServiceReference1.WebService1SoapClient();
    string str = client.MyMehod("", "");//上一句就报错了

    预览页面就报错

    无法加载协定为“ServiceReference1.WebService1Soap”的终结点配置部分,因为找到了该协定的多个终结点配置。请按名称指示首选的终结点配置部分。

    请问是怎么回事?


    开心了就笑,不开心了就过会儿再笑

    2015年10月27日 11:21

答案

  • 看你的web.config,里面有<client></client>节点下,应该有多个endpoint. 

    .net运行时不知道使用哪个endpoint来调用web service. 

    解决方法

    1. 如果你只调用一个web service ,可以在web.config中删除冗余的endpoint,这样运行时就知道用这个唯一的endpoint了。

    2. 如果调用多余一个web service, 那么每个service应该有一个endpoint对应,代码里初始化WebService1SoapClient的时候要使用,接收endpoint作为参数的overload构造函数,例如

    ServiceReference1.WebService1SoapClient client = new ServiceReference1.WebService1SoapClient("EndpointName");

    • 已标记为答案 NewJoin 2015年10月30日 12:53
    2015年10月27日 23:23
  • 你好,

    你的两个endpoint看起来是不同的,分别用于soap1.1和soap1.2. 如果你确定只使用一个的话,可以删除另一个,已经对应的binding. binding不删除没有问题。

    但是一update service reference...还会回来。

    因此我建议在代码中,制定使用哪个endpint,例如:

    ServiceReference1.WebService1SoapClient client = new ServiceReference1.WebService1SoapClient("WebService1Soap");  或者使用另一个endpiont

    可以通过修改url 来调用live或者test的webservice 。


    • 已编辑 Simon Cai 2015年10月28日 3:33
    • 已标记为答案 NewJoin 2015年10月30日 12:52
    2015年10月28日 3:33

全部回复

  • 看你的web.config,里面有<client></client>节点下,应该有多个endpoint. 

    .net运行时不知道使用哪个endpoint来调用web service. 

    解决方法

    1. 如果你只调用一个web service ,可以在web.config中删除冗余的endpoint,这样运行时就知道用这个唯一的endpoint了。

    2. 如果调用多余一个web service, 那么每个service应该有一个endpoint对应,代码里初始化WebService1SoapClient的时候要使用,接收endpoint作为参数的overload构造函数,例如

    ServiceReference1.WebService1SoapClient client = new ServiceReference1.WebService1SoapClient("EndpointName");

    • 已标记为答案 NewJoin 2015年10月30日 12:53
    2015年10月27日 23:23
  • 谢谢。配置节点如下

        <system.serviceModel>
            <bindings>
                <basicHttpBinding>
                    <binding name="WebService1Soap" />
                </basicHttpBinding>
                <customBinding>
                    <binding name="WebService1Soap12">
                        <textMessageEncoding messageVersion="Soap12" />
                        <httpTransport />
                    </binding>
                </customBinding>
            </bindings>
            <client>
                <endpoint address="http://localhost:1883/WebService1.asmx"
                    binding="basicHttpBinding" bindingConfiguration="WebService1Soap"
                    contract="ServiceReference1.WebService1Soap" name="WebService1Soap" />
                <endpoint address="http://localhost:1883/WebService1.asmx"
                    binding="customBinding" bindingConfiguration="WebService1Soap12"
                    contract="ServiceReference1.WebService1Soap" name="WebService1Soap12" />
            </client>
        </system.serviceModel>

    我删除一个 endpoint 后,果然可以使用了。那么我想问,

    1两个 endpoint k可以随便删除吗?

    2.删除 endpoint 后,对应的 bindings 里的节点也要删除吧?不删除有什么影响吗?

    3.我可以通过只修改 这里的地址,来更新服务内容吗?比如把本地地址换成远程地址


    开心了就笑,不开心了就过会儿再笑

    2015年10月28日 0:54
  • 经过测试,第三条问题,直接修改地址,是可以更新服务的

    开心了就笑,不开心了就过会儿再笑

    2015年10月28日 1:03
  • 你好,

    你的两个endpoint看起来是不同的,分别用于soap1.1和soap1.2. 如果你确定只使用一个的话,可以删除另一个,已经对应的binding. binding不删除没有问题。

    但是一update service reference...还会回来。

    因此我建议在代码中,制定使用哪个endpint,例如:

    ServiceReference1.WebService1SoapClient client = new ServiceReference1.WebService1SoapClient("WebService1Soap");  或者使用另一个endpiont

    可以通过修改url 来调用live或者test的webservice 。


    • 已编辑 Simon Cai 2015年10月28日 3:33
    • 已标记为答案 NewJoin 2015年10月30日 12:52
    2015年10月28日 3:33