officeba > 单独文章


用InfoPath 2007表单调用WCF服务的问题

尝试在InfoPath2007 表单中的托管代码里调用WCF服务的时候,遇到了一个问题,InfoPath会报错说找不到服务的Contract。但实际上这个服务的配置文件是没有问题的。

后来在这个文章里找到了解法,简单做了个演示例子,供大家参考。

首先,我做了一个很简单的WCF服务,发送一个代表学号的字符串请求,返回一个学生姓名。

该服务运行位置:https://localhost:50446/WCFTest/Service.svc

然后我写了一个WinConsole的客户端程序进行调用,结果如下,验证客户端的配置无误:

接下来,我打开InfoPath,放置几个简单的控件,然后在VSTA中编写“Get Name”按钮的响应函数:

ServiceClient client = new ServiceClient();
string result = client.GetStudentName(this.CreateNavigator().SelectSingleNode("/my:myFields/my:txtStudentID",this.NamespaceManager).Value);
this.CreateNavigator().SelectSingleNode("/my:myFields/my:msgBox", this.NamespaceManager).SetValue(result);

逻辑很简单,就是将StudentID传递给服务,取得的结显示在Student Name栏中。做法和之前的WinConsole程序无异

预览表单,输入学号,点击“Get Name”

 

得到了错误信息:

system.InvalidOperationException
Could not find default endpoint element that references contract 'IService' in the ServiceModel client configuration section. This might be because no configuration file was found for your application, or because no endpoint element matching this contract could be found in the client element.

原因为InfoPath未能认出Configuration的信息。

(注:我觉得很有可能是我配置的问题,所以如果您知道正解,欢迎留言赐教)

解决办法为,修改按钮响应函数为:

EndpointAddress address = new EndpointAddress("https://localhost:50446/WCFTest/Service.svc");
WSHttpBinding binding = new WSHttpBinding();
IServiceChannel channel = ChannelFactory<IServiceChannel>.CreateChannel(binding, address);
string result = channel.GetStudentName(this.CreateNavigator().SelectSingleNode("/my:myFields/my:txtStudentID",this.NamespaceManager).Value);
this.CreateNavigator().SelectSingleNode("/my:myFields/my:msgBox", this.NamespaceManager).SetValue(result);

直接使用服务Channel的接口进行调用,顺利得到预期结果:


声明:欢迎各大网站转载本站文章,还请保留一条能直接指向本站的超级链接,谢谢!

时间:2008-04-12 09:47:01,点击:65824


【OfficeBa论坛】:阅读本文时遇到了什么问题,可以到论坛进行交流!Excel专家邮件:342327115@qq.com(大家在Excel使用中遇到什么问题,可以咨询此邮箱)。

【声明】:以上文章或资料除注明为Office自创或编辑整理外,均为各方收集或网友推荐所得。其中摘录的内容以共享、研究为目的,不存在任何商业考虑。如有任何异议,请与本站联系,本站确认后将立即撤下。谢谢您的支持与理解!


相关评论

我要评论

评论内容