我无法尝试将Infopath 2007表单连接到WCF Web服务。我似乎Infopath只想通过SOAP 1.0消息进行通信。为了解决这个问题,我创建了一个.asmx Web服务。我是否应该考虑继续这种解决方法或找出让WCF发布SOAP 1.0 1.1消息的方法?
答案 0 :(得分:4)
通过在webconfig中使用basicHttpBinding而不是wsHttpBinding,WCF可以使用InfoPath。
答案 1 :(得分:1)
只是为了帮助xanax回答这是我最终在web.config文件中做的事情。这是创建新WCF服务时生成的默认配置的一部分。我注释掉了一个端点,并添加了一个新端点,唯一的变化是从wsHttpBinding到basicHttpBinding的绑定,并且它有效。
<system.serviceModel>
<services>
<service name="Service" behaviorConfiguration="ServiceBehavior">
<!-- Service Endpoints -->
<!--<endpoint address="" binding="wsHttpBinding" contract="IService">-->
<endpoint address="" binding="basicHttpBinding" contract="IService">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
...Other Config Here....
<system.serviceModel>
答案 2 :(得分:1)
默认情况下,InfoPath仅适用于basicHttpBinding。将Webservice与InfoPath一起使用时,通常将Web服务URL放在UDX文件中。在该文件中,无法为目标服务指定绑定。您通常不会自己为您的服务创建代理,InfoPath会在场景后面为您执行该代理,并且该代理仅使用basicHttpBinding。
如果您希望InfoPath表单与使用非basicHttpBinding的WCF服务一起使用,您可以通过在 InfoPath表单代码中以编程方式自行创建代理来实现。以编程方式创建代理时,可以在代理的构造函数中指定目标WCF服务的绑定。使用以编程方式创建的代理时不存在任何限制。当然,应该已经安装了.NET 3.5,以便您的代码可以使用WCF库来创建具有正确绑定的代理。安装InfoPath时,只有.NET 2可用。
我用wsHttpBinding尝试了这个,它没有问题。通过阅读许多文章和帖子,似乎很多人认为InfoPath只能使用basicHttpBinding。这只是部分正确,因为它仅适用于您自己不创建代理的情况。