积极答复者
sl无法获取到wcf的元数据,提示 ”给定关键字不在字典中。“

问题
-
一个WCF服务,以tcp绑定host在控制台上,客户端是console时,能够正常获取元数据且能正常调用,但是放到Silverlight中调用时出现“给定关键字不在字典中。”错误,我估计是WCF的配置文件 <serviceMetadata httpGetEnabled="false"/>这里出错,但是不知道怎么改。
服务代码:
public class Program { static void Main(string[] args) { PolicySocketServer StartPolicyServer = new PolicySocketServer(); Thread th = new Thread(new ThreadStart(StartPolicyServer.StartSocketServer)); th.IsBackground = true; th.Start(); MyHost.Open(); System.Console.WriteLine("服务已经启动... 敲任意键停止服务"); System.Console.ReadLine(); MyHost.Close(); } } public class MyHost { static ServiceHost host = null; public static void Open() { host = new ServiceHost(typeof(ChatService)); host.Open(); } public static void Close() { if (host != null && host.State == CommunicationState.Opened) { host.Close(); } host = null; } } public class ChatService : IChatService { private static List<MessageInfo> listMessages = new List<MessageInfo>(); public void SendMessage(MessageInfo message) { listMessages.Add(message); } public List<MessageInfo> GetMessages(string userName, string partnerName) { var list = listMessages.Where(m => m.PartnerName == userName && m.UserName == partnerName).ToList(); listMessages.RemoveAll(m => m.PartnerName == userName && m.UserName == partnerName); return list; } } [ServiceContract] public interface IChatService { [OperationContract] void SendMessage(MessageInfo message); [OperationContract] List<MessageInfo> GetMessages(string userName, string partnerName); }
app.config配置
<system.serviceModel> <services> <service behaviorConfiguration="Server.ChatServiceBehavior" name="Server.ChatService"> <host> <baseAddresses> <add baseAddress="net.tcp://localhost:4503/"/> </baseAddresses> </host> <endpoint address="ChatService" binding="netTcpBinding" contract="Server.IChatService"></endpoint> <endpoint address="ChatService/mex" binding="mexTcpBinding" contract="IMetadataExchange" ></endpoint> </service> </services> <behaviors> <serviceBehaviors> <behavior name="Server.ChatServiceBehavior"> <serviceMetadata httpGetEnabled="false"/> <serviceDebug includeExceptionDetailInFaults="false"/> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel>
在SL端引用的地址是net.tcp://localhost:4503/chatservice/mex,引用时没有出错,但是SL端的配置文件ServiceReferences.ClientConfig中没有数据,
而且在运行SL时,
ChatService.ChatServiceClient proxy = new ChatService.ChatServiceClient();
出现“给定关键字不在字典中”的异常提示
stay hungry stay foolish
答案
-
<serviceMetadata httpGetEnabled="false"/>
这个不开启,应该是没有启用元数据服务终结点的啊。怎么能查找呢。你修改为true看看
Frank Xu Lei--谦卑若愚,好学若饥
专注于.NET平台下分布式应用系统开发和企业应用系统集成
Focus on Distributed Applications Development and EAI based on .NET
【老徐的网站】:http://www.frankxulei.com/
【老徐的博客】:http://www.cnblogs.com/frank_xl/
【WCF中文技术论坛】:微软WCF中文技术论坛
【WCF英文技术论坛】:微软WCF英文技术论坛- 已标记为答案 Weng YuliModerator 2010年7月22日 4:09
-
此例子需要在IIS上部署cross domain policy 文件,同时为wcf服务打开防火墙4504端口。 具体步骤,你看一下web项目下的ReadMe.html
Mog Liang- 已标记为答案 Weng YuliModerator 2010年7月22日 4:09
全部回复
-
<serviceMetadata httpGetEnabled="false"/>
这个不开启,应该是没有启用元数据服务终结点的啊。怎么能查找呢。你修改为true看看
Frank Xu Lei--谦卑若愚,好学若饥
专注于.NET平台下分布式应用系统开发和企业应用系统集成
Focus on Distributed Applications Development and EAI based on .NET
【老徐的网站】:http://www.frankxulei.com/
【老徐的博客】:http://www.cnblogs.com/frank_xl/
【WCF中文技术论坛】:微软WCF中文技术论坛
【WCF英文技术论坛】:微软WCF英文技术论坛- 已标记为答案 Weng YuliModerator 2010年7月22日 4:09
-
ServiceReferences.ClientConfig 里没有数据的话,如下的代码是不能成功初始化WCF Client的
ChatService.ChatServiceClient proxy = new ChatService.ChatServiceClient();
服务端netTcpBinding 默认开启了 Message seucrity with Windows authentication,这些silverlight不支持的,你要关掉才行。
我写了个silverlight 访问NetTcp WCF 的例子,你参考一下
http://cid-8d29fb569d8d732f.office.live.com/self.aspx/.Public/WCF/SL4WCFNetTcp.zip
顺便做一下广告, All-in-one code framework 中文版也发布了,欢迎大家访问
Mog Liang -
此例子需要在IIS上部署cross domain policy 文件,同时为wcf服务打开防火墙4504端口。 具体步骤,你看一下web项目下的ReadMe.html
Mog Liang- 已标记为答案 Weng YuliModerator 2010年7月22日 4:09
-
就是提示端口禁止访问,另外,你的例子是双工的,我的只是单向的一个请求,而且应该就是端口访问的问题,
我已经调了好几天了,代码改过无数次,资料也查了很多,如果有时间的话请帮我看一下看这个代码。
https://cid-3f24879ddc3465b0.office.live.com/self.aspx/MyProject/WcfTcpSilverlight.rar
stay hungry stay foolish -
wengyuli@hotmail.com
stay hungry stay foolish