none
引用WCF服务,提示错误“在 ServiceModel 客户端配置部分中,找不到引用协定"XXX"的默认终结点元素” RRS feed

  • 问题

  • 有2个project,1个是提供WCF服务的Server,一个是用WPF编写的Client,client通过添加服务引用的方式使用WCF提供的服务。

    现象是:在编辑模式下,UI显示异常,不能正常加载,但是调试状态下所有功能都OK 详细的错误信息是在 "ServiceModel 客户端配置部分中,找不到引用协定"XXX"的默认终结点元素”。这可能是因为未找到应用程序的配置文件,或者是因为客户端元素中找不到与此协定匹配的终结点元素"。

    UI不能加载,就不能进行查看属性,添加事件等操作,这个问题已经困扰我一周了,请高手帮忙解决!!!多谢

    2011年6月30日 4:41

答案

  • Hi,

    初始化界面设计器时,Visual studio默认是从devenv.exe.config(在win7中默认路径C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe.config
    )配置文件中读取配置信息,当你在界面构造函数中调用WCF服务时,devenv.exe.config中不存在WCF配置信息,故而抛出上面的错误,你需要把WCF客户端配置信息粘贴到devenv.exe.config文件中。但是建议最好不要在ViewModel构造函数中调用WCF服务。


    Please mark the replies as answers if they help or unmark if not. If you have any feedback about my replies, please contact msdnmg@microsoft.com Microsoft One Code Framework
    2011年7月6日 3:10
    版主

全部回复

  • 那你把客户端配置文件关于WCF服务地址的配置检查下,应该是那里不对。搞不定就把配置信息贴一下
    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

    老徐的网站】:http://www.frankxulei.com/

    微软WCF中文技术论坛
    微软WCF英文技术论坛

    Windows Azure中文技术论坛

    2011年6月30日 14:33
    版主
  • 谢谢版主的回复,下面是Client的app.config,请帮忙看一下,多谢。

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <configSections>
        </configSections>
        <connectionStrings />
        <system.serviceModel>
            <bindings>
                <netTcpBinding>
                    <binding name="NetTcpBinding_IEncryptor" closeTimeout="00:01:00"
                        openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                        transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"
                        hostNameComparisonMode="StrongWildcard" listenBacklog="10"
                        maxBufferPoolSize="524288" maxBufferSize="65536" maxConnections="10"
                        maxReceivedMessageSize="65536">
                        <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                            maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                        <reliableSession ordered="true" inactivityTimeout="00:10:00"
                            enabled="true" />
                        <security mode="None">
                            <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
                            <message clientCredentialType="Windows" />
                        </security>
                    </binding>
                    <binding name="NetTcpBinding_IDataSourceService" closeTimeout="00:01:00"
                        openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                        transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"
                        hostNameComparisonMode="StrongWildcard" listenBacklog="10"
                        maxBufferPoolSize="524288" maxBufferSize="65536" maxConnections="10"
                        maxReceivedMessageSize="65536">
                        <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                            maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                        <reliableSession ordered="true" inactivityTimeout="00:10:00"
                            enabled="true" />
                        <security mode="None">
                            <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
                            <message clientCredentialType="Windows" />
                        </security>
                    </binding>
                </netTcpBinding>
            </bindings>
            <client>
                <endpoint address="net.tcp://localhost:8732/Encryptor/" binding="netTcpBinding"
                    bindingConfiguration="NetTcpBinding_IEncryptor" contract="EncryptorService.IEncryptor"
                    name="NetTcpBinding_IEncryptor">
                    <identity>
                        <dns value="localhost" />
                    </identity>
                </endpoint>
                <endpoint address="net.tcp://localhost:8732/DataSourceService/"
                    binding="netTcpBinding" bindingConfiguration="NetTcpBinding_IDataSourceService"
                    contract="DataSourceService.IDataSourceService" name="NetTcpBinding_IDataSourceService">
                    <identity>
                        <dns value="localhost" />
                    </identity>
                </endpoint>
            </client>
        </system.serviceModel>
    </configuration>

    2011年7月1日 0:33
  • <endpoint address="net.tcp://localhost:8732/Encryptor/" binding="netTcpBinding"
                    bindingConfiguration="NetTcpBinding_IEncryptor" contract="EncryptorService.IEncryptor"//检查下这里,看看这个契约的名称,Namespace是否正确
                    name="NetTcpBinding_IEncryptor">
                    <identity>
                        <dns value="localhost" />
                    </identity>
                </endpoint>
                <endpoint address="net.tcp://localhost:8732/DataSourceService/"
                    binding="netTcpBinding" bindingConfiguration="NetTcpBinding_IDataSourceService"
                    contract="DataSourceService.IDataSourceService" name="NetTcpBinding_IDataSourceService">"//检查下这里,看看这个契约的名称,Namespace是否正确
         

    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

    老徐的网站】:http://www.frankxulei.com/

    微软WCF中文技术论坛
    微软WCF英文技术论坛

    Windows Azure中文技术论坛

    2011年7月1日 9:11
    版主
  • Server端的Namespace是My.Service.ManagementService.IEncryptor

    app.config是引用服务后自动生成的,我起名为EncryptorService,Client端自动生成代码的名空间是My.Service.Manager.EncryptorService,在这个名空间下确实也有自动生成的接口My.Service.Manager.EncryptorService.IEncryptor。

    将app.config中的contract改为My.Service.Manager.EncryptorService.IEncryptor同样不能正常显示UI。

    另外,这个项目是用MVVM模式做的,这个加密接口是在ViewModel的构造函数中初始化的,如果将其注释就可以正常显示UI,有没有可能是WPF对这种加载方式支持不好呢?对了,开发环境是VS2010,谢谢老徐。

    2011年7月1日 9:44
  • Hi,

    初始化界面设计器时,Visual studio默认是从devenv.exe.config(在win7中默认路径C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe.config
    )配置文件中读取配置信息,当你在界面构造函数中调用WCF服务时,devenv.exe.config中不存在WCF配置信息,故而抛出上面的错误,你需要把WCF客户端配置信息粘贴到devenv.exe.config文件中。但是建议最好不要在ViewModel构造函数中调用WCF服务。


    Please mark the replies as answers if they help or unmark if not. If you have any feedback about my replies, please contact msdnmg@microsoft.com Microsoft One Code Framework
    2011年7月6日 3:10
    版主
  • 我也碰到了这个问题:“在 ServiceModel 客户端配置部分中,找不到引用协定“IPartsHistory”的默认终结点元素。这可能是因为未找到应用程序的配置文件,或者是因为客户端元素中找不到与此协定匹配的终结点元素。”

    我的情况是:通过SvcUtil.exe生成的客户端代码和配置文件,问题就是出现在这个客户端的配置文件上,第一:文件名一定要是App.config;第二:endpoint的name属性,在代码实例化时要一致。

    2012年11月21日 17:22