积极答复者
网页中的加载的client object,无法找到找不到引用协定“xxxxx” 的默认终结点元素

问题
-
我在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时间比较短,望各位大大指点一二
答案
-
你这个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/
- 已标记为答案 Peter pi - MSFTModerator 2011年4月29日 9:32
全部回复
-
你这个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/
- 已标记为答案 Peter pi - MSFTModerator 2011年4月29日 9:32
-
我是在网站类型的项目中使用,方法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/