2009-10-14 69 views
4

我在嘗試將Infopath 2007表單連接到WCF Web服務時遇到問題。我看來Infopath只想通過SOAP 1.0消息進行通信。爲了解決這個問題,我創建了一個.asmx Web服務。我應該考慮繼續採取這種解決方法還是找出一種方法讓WCF發出SOAP 1.0 1.1消息?Infopath 2007和WCF數據連接

+0

你的意思是SOAP 1.1,對吧? – 2009-10-17 03:34:34

+0

對不起,你是對的。肥皂1.1我會改變這個問題來反映這一點。 – 2009-10-18 22:09:36

回答

4

通過在webconfig中使用basicHttpBinding而不是wsHttpBinding,可以讓WCF與InfoPath一起使用。

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> 
1

InfoPath默認情況下僅適用於basicHttpBinding。在InfoPath中使用webservice時,通常將webservice URL放入UDX文件中。在該文件中,沒有辦法爲目標服務指定綁定。您通常不會自己爲您的服務創建代理,InfoPath會爲您在幕後執行此代理,並且該代理僅使用basicHttpBinding。

如果你希望你的InfoPath表單與使用非basicHttpBinding的WCF服務工作,你可以通過在InfoPath表單代碼創建自己的代理程序這樣做。當您以編程方式創建代理時,您可以在代理的構造函數中指定目標WCF服務的綁定。使用編程創建的代理時不存在任何限制。當然,應該已經安裝了.NET 3.5,以便WCF庫可用於您的代碼以創建具有正確綁定的代理。當您安裝InfoPath時,只有.NET 2可用。

我已經試過這與wsHttpBinding和它的工作沒有問題。從閱讀許多文章和帖子,似乎很多人認爲InfoPath只能使用basicHttpBinding。這僅僅是部分正確的,因爲它只適用於你自己不創建代理的情況。

+0

同意。我最初試圖讓WCF在沒有表單代碼的情況下使用infopath。最後,我剛與舊的asmx webservices一起去了。讓信息交流者理清它的代理,特別是當接口發生變化時,不用麻煩。並且在web服務方面更少麻煩,因爲它只適用於infopath,沒有解決方法。 我可能會看到更進一步的軌道。 – 2010-04-26 23:22:19