3

我正嘗試使用外部內容類型將Sharepoint 2010與Microsoft Dynamics Nav 2009 R2(Navision)集成。我對Dynamics Nav以及Sharepoint 2010中的Buisness Connectivity Service都非常陌生,我無法實現它。使用BCS與Sharepoint 2010集成Microsoft Dynamics Nav(Navision)

我知道您可以將動態導航中的頁面作爲Web服務發佈,並且我已經將其中一個演示頁面作爲Web服務發佈,並已成功使用Visual Studio連接到它(作爲Web參考添加它)。我以編程方式調用了添加和刪除方法,它工作正常。

我打開了sharepoint設計器並試圖添加一個外部內容類型。我將「數據源類型」設置爲「WCF服務」,並在「服務元數據URL」和「服務終點URL」中將網址用於Web服務(http:// devel:7047/DynamicsNAV/WS/Page/Customer) 」。當我嘗試連接到Web服務時,出現錯誤,提示「無法找到任何匹配的端點配置」。

就像我剛纔所說的,我對於Microsoft Dynamics Nav和SharePoint中的外部內容類型都很陌生。關於Dynamics Nav和Sharepoint集成的信息很難找到,我感覺有點失落。如果有人能夠了解如何使用BCS將Dynamics Nav與SharePoint集成在一起,我們將非常感激。

回答

1

你不得不原諒我,雖然我知道關於NAV網絡服務的一些東西,但我幾乎不知道Sharepoint和BCS。

但是,話雖如此,我確實有幾條建議可能會有所幫助:首先,NAV Web服務基於WCF構建,並使用BasicHttpBinding。如果您對如何將WCF BasicHttpBinding服務連接到BCS做了一些研究,那麼您可能會在此獲得一些牽引力。任何標準的BasicHttpBinding服務和NAV特定的Web服務之間沒有根本的區別。

您還提到您可以使用Web引用成功連接到Visual Studio中的NAV Web服務。但是,Web引用代理是使用舊的「wsdl.exe」實用程序構建的,因此只能與傳統的SOAP Web服務一起使用。雖然BasicHttpBinding服務完全向後兼容SOAP Web服務,但仍然存在缺少任何WCF服務特有的配置設置的問題。您真的可能想考慮在Visual Studio中使用服務引用,並弄清楚如何使其與已發佈的NAV Web服務正常工作。通過這種方式,您可以使用生成的配置設置來希望瞭解Sharepoint設計人員缺少的內容。我的猜測是缺少的「端點配置」錯誤告訴你,在使用WCF代理連接到NAV Web服務之前,必須在Sharepoint設計器中使用一些WCF特定的設置。例如,它可能在安全性方面,因爲WCF比傳統的SOAP提供了更精細的控制級別。同樣,我認爲的關鍵是記住,共享點需要一個正確配置的WCF端點,而舊的Web引用則不需要。這可能就是爲什麼你可以讓它在Visual Studio中工作而不是在Sharepoint設計器中工作的原因。

只給你一個想法(沒有「最佳實踐」一課),當我在NAV項目創建服務引用代理我經常嘗試去與基於代碼的配置,而不是基於文件的過於冗長配置(特別是因爲我們無法控制NAV服務層端點綁定)。我使用類似於此的代碼來創建客戶端連接(當然,這只是僞代碼,並且不會編譯,您需要指向實際的服務引用客戶端代理類,但這應該會給您一個想法哪些WCF綁定配置參數是必要的):

using System.Security.Principal; 
    using System.ServiceModel; 

    private void TestNavConnection(string url) 
    { 
     using (var ws = new NavServiceReference(GetBindingTransportCredentialOnly(), new EndpointAddress(url))) 
     { 
      ws.ClientCredentials.Windows.AllowNtlm = true; 
      ws.ClientCredentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Delegation; 
      var record = ws.Read("XYZ"); 
     } 
    } 

    private static BasicHttpBinding GetBindingTransportCredentialOnly() 
    { 
     var binding = new BasicHttpBinding(); 
     binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly; 
     binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows; 
     binding.MaxReceivedMessageSize = 1048576; 
     return binding; 
    } 

希望這會有所幫助。祝你好運!

相關問題