none
网页中的加载的client object,无法找到找不到引用协定“xxxxx” 的默认终结点元素 RRS feed

  • 问题

  • 我在iis中建立了一个wcf服务,建立一个用户控件(UserControl,基于Form),访问wcf服务,这个控件主要是用来做图形界面,编译成类库dll后,在一个Web项目的页面中加载为一个object ,这个时候,出现无法找到找不到引用协定“xxxxx” 的默认终结点元素,在web项目的服务器端的使用类库dll的wcf访问的功能是正常的(我已经把wcf服务配置放到了web项目中),但是网页中的控件客户端不正常。

    我想是在浏览器端访问wcf的缘故,但是我不知道 这个配置应该放在什么位置,我也想用代码指定的方法,不过,查了一下午,没找到比较明确的方法。

    配置是这样的(默认生成的)

        <system.serviceModel>
            <bindings>
                <wsHttpBinding>
                    <binding name="WSHttpBinding_IQuery" closeTimeout="00:01:00"
                        openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                        bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
                        maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                        messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
                        allowCookies="false">
                        <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                            maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                        <reliableSession ordered="true" inactivityTimeout="00:10:00"
                            enabled="false" />
                        <security mode="Message">
                            <transport clientCredentialType="Windows" proxyCredentialType="None"
                                realm="" />
                            <message clientCredentialType="Windows" negotiateServiceCredential="true"
                                algorithmSuite="Default" establishSecurityContext="true" />
                        </security>
                    </binding>
                </wsHttpBinding>
            </bindings>
            <client>
                <endpoint address=http://xxxx/Query.svc binding="wsHttpBinding"
                    bindingConfiguration="WSHttpBinding_IQuery" contract="ServiceRef.IQuery"
                    name="WSHttpBinding_IQuery">
                    <identity>
                        <dns value="localhost" />
                    </identity>
                </endpoint>
            </client>
        </system.serviceModel>

    网页中是这样加载的

    <object ID="obj1"
            classid="http:Client.dll#Client.QueryClient"
            style="color:#000000"
            height="420"
            width="770" >
           
        </object>

    接触wcf时间比较短,望各位大大指点一二


    2011年4月24日 12:09

答案

  • 你这个UserControl (Winform)它添加WCF服务引用,生成的配置文件包含WCF服务终结点的信息。就是你前面贴的配置信息。 这个变异生成的DLL,其它想项目使用的话,因为前面的UserControl使用了配置文件来找服务终结点: <endpoint address=http://xxxx/Query.svc binding="wsHttpBinding"。 其它引用这个UserControl的项目,也必须具备这个配置文件里的 WCF服务终结点的信息。 解决办法由2个: 1.把你之前建立的UserControl项目的配置文件里关于WCF的引用的配置信息,拷贝到引用DLL的项目配置文件里。 2.或者修改 UserControl项目,不使用配置文件里设置服务终结点的方式,你可以使用C#代码,来为WCF客户端设置服务终结点。一样的效果。
    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

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

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

    Windows Azure中文技术论坛

    2011年4月26日 9:21
    版主

全部回复

  • runat = "server"
    2011年4月25日 1:19
  • runat="server" 加上后,编译通不过 ,classid 不是GUID

    还有就是  wcf 的访问是 在 网页客户端上进行的,runat="server" 可以的吗 ,要是行的话,我就用windowsform控件重新整一下,我现在是类库方式编的。

    这个就好象 那种 股票数据实时绘图一样,做成了一个控件,通过wcf获得数据,然后 在网页中进行图形绘制(当然这个不是就是股票图形,我是举个例子,我能想到的比较类似的应用环境 )

     

    2011年4月25日 5:36
  • 你要是ActiveX控件形式的话,一是通过硬编码把服务的地址写进去;

    另一种方式是为为你的ActiveX控件设置属性,用于设置服务地址,然后在你的控件内部通过这个属性提供的地址连接服务.

    2011年4月25日 7:02
  • 请指教一下 怎么写法

    光是 endpointaddress 不行的。

     

     

    2011年4月25日 12:44
  • 你这个UserControl (Winform)它添加WCF服务引用,生成的配置文件包含WCF服务终结点的信息。就是你前面贴的配置信息。 这个变异生成的DLL,其它想项目使用的话,因为前面的UserControl使用了配置文件来找服务终结点: <endpoint address=http://xxxx/Query.svc binding="wsHttpBinding"。 其它引用这个UserControl的项目,也必须具备这个配置文件里的 WCF服务终结点的信息。 解决办法由2个: 1.把你之前建立的UserControl项目的配置文件里关于WCF的引用的配置信息,拷贝到引用DLL的项目配置文件里。 2.或者修改 UserControl项目,不使用配置文件里设置服务终结点的方式,你可以使用C#代码,来为WCF客户端设置服务终结点。一样的效果。
    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

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

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

    Windows Azure中文技术论坛

    2011年4月26日 9:21
    版主
  • 我是在网站类型的项目中使用,方法1的复制配置信息网站的web.config中,在服务端代码是可以正常的,不过我是把dll作为了activex 在网页中加载,浏览器客户端运行,会提示 终结点找不到。

    方法2的 C# 代码 来设置服务终结点,应该怎么写代码,能否指点一下。

    2011年4月26日 12:28
  • 我是在网站类型的项目中使用,方法1的复制配置信息网站的web.config中,在服务端代码是可以正常的,不过我是把dll作为了activex 在网页中加载,浏览器客户端运行,会提示 终结点找不到。

    方法2的 C# 代码 来设置服务终结点,应该怎么写代码,能否指点一下。


    类似这种,你看下客户端CLient的类的构造函数的参数就知道了。

    有一个是接受Binding和EndpointAddress参数的 。

    你实例化一个对象,传递给这个参数即可。

      WCFServiceClient proxy = new WCFServiceClient(new BasicHttpBinding,new EndpointAddress("http://localhost:9003/WCFService"));


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

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

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

    Windows Azure中文技术论坛

    2011年4月27日 14:59
    版主
  • 老徐:

        你好,我这几天也是做WCF服务的程序做个Activex控件模式,同样遇到了这个问题,我想用配置文件的方式,不想用代码写进去,能否做到啊?看到楼主说会找不到终结点,你提供的方法不知道解决了没。

    2011年5月9日 12:54
  • 这样的做解决了没?如果解决了我也试试,麻烦楼主和老徐尽快答复。多谢啊。
    2011年5月9日 12:55